IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problemes d'ajout dans une JList à partir d'un Jtextfield


Sujet :

Java

  1. #1
    Nouveau membre du Club Avatar de elmander
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 37
    Points
    37
    Par défaut Problemes d'ajout dans une JList à partir d'un Jtextfield
    Bonjour voila j'ai un gros problemes j'ai fait un programme ou l'on peut ajouter du texte (via un JTextField et commander par un Jbutton) et le texte est ensuite inscrit dans une JList mais cela ne marche pas ...
    voici la class ou se trouve les elements de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    public class Contenu extends JPanel { 
    	private JList li;
    	private JTextField tf;
    	private  Vector<String> contenu ;				//Initialisation de l'outil Vector
    	public Contenu (PDT f) {
     
    		contenu=new Vector<String>();		
    		contenu.add("tck-29");				// ajout de contenu dans le Vector
    		contenu.add("tck-11");
    		contenu.add("tck-6");
    		contenu.add("tck-22");
    		contenu.add("tck-13");
    		contenu.add("tck-25");
    		contenu.add("tck-27");
    		contenu.add("tck-14");
    		contenu.add("tck-2");
    		BorderLayout bl;
    		bl= new BorderLayout ();
    		this.setLayout (bl);
    		JPanel pa;
    		pa= new JPanel();
    		JLabel lab ;
    		lab= new JLabel("CONTENU");				
    		this.add(pa, BorderLayout.NORTH);		//class gerer par BorderLayout 
    		pa.add(lab);
    		pa.setBackground(Color.PINK);
     
    		JScrollPane Sp;							//ScrollPane pour Asenceur ,
    		li= new JList (contenu);				
    		Sp = new JScrollPane(li);				// dans la Jlist.
    		this.add(Sp , BorderLayout.CENTER);		// ajouter au centre du Border
     
    		JPanel pan ;
    		pan= new JPanel ();
    		this.add(pan,BorderLayout.SOUTH);		// un panel au sud
    		FlowLayout fl;							// gerer par FlowLayout
    		fl= new FlowLayout ();						
    		pan.setLayout(fl);
    		JTextField tf;							
    		tf= new JTextField(6);
    		pan.add(tf);							// JTextField inclu dans le panel 
     
    		JButton b1;
    		b1= new JButton ("ajout");				
    		pan.add(b1);							// Un Buton d'ajout inclu dans panel
    		pan.setBackground(Color.PINK);
    		this.setBackground(Color.PINK);
     
    		Ecouteur ec7;							// Ecouteur renvoyant a fonction d'ajout
    		ec7 = new Ecouteur (7,f);
    		b1.addActionListener(ec7);
    		Ecouteur ec9;							//Ecouteur renvoyant a fonction de changement
    		ec9 = new Ecouteur (9,f);							//du texte
    		tf.addActionListener(ec9);
    		}
    	public void ajout() {								// ajoute le texte de la TextField
    		String s ;
    		s = tf.getText();
    		contenu.add(s);
    		s= contenu.get(0);
    	}
    	public String SelectionTexte(){
    		return li.getSelectedValue().toString();		// retourne la JList
    	}
    }

  2. #2
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut Problemes d'ajout dans une JList à partir d'un Jtextfield
    Bonjour,
    Je pense que tu es trempé de rubrique. Tu as posté ton message dans la section réservée aux Applets. A la rigueur ce n'est pas méchant, les applets ne différent grand choses de Swing ou autres.
    Deuxième point essayes de mettre ton code entre les balises CODE, et enfin essayes de poster le message d'erreur. C'est le plus important, si tu veux avoir de l'aide.

    Merci

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Il faudrait le code de "Ecouteur" et "PDT". Et par pitié pour nous, pauvres lecteurs, met des noms de variables explicites !

  4. #4
    Nouveau membre du Club Avatar de elmander
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 37
    Points
    37
    Par défaut merci
    Class Principal (PDT):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    public class PDT extends JFrame { 
    	private static JLabel lab ;        				 // instanciation du Label "bonjour" 
    	private Couleur coul;
    	private Color tabcouleur[] = {Color.BLACK,Color.RED,Color.PINK};
    	private Contenu cont;
    	public PDT (String t) {
    		super( t );
     
    		BorderLayout bl ; 
    		bl = new BorderLayout () ;				//label gerer par BorderLayout
    		this.setLayout (bl) ;
    		lab = new JLabel ("bonjour") ;
    		this.add(lab, BorderLayout.NORTH) ;		// ajout du label au nord
    		lab.setBackground(Color.CYAN);
    		lab.setOpaque(true);
     
    		JPanel pa ;
    		pa = new JPanel () ;					//Panel pour bouton exit
    		FlowLayout fl;
    		fl = new FlowLayout () ;				//Gerer par FlowLayout pour l'alignement
    		pa.setLayout (fl);				
    		pa.setBackground(Color.YELLOW);  
    		JButton bouton3 ;
    		bouton3 = new JButton ("Quitter");     
    		pa.add(bouton3);
    		this.add(pa,BorderLayout.SOUTH);			// Panel placer au sud
    		Ecouteur ec1;
    		ec1 = new Ecouteur( 1 , this );			  // Ecouteur faisant appel a la fonction Exit,
    		bouton3.addActionListener( ec1 );		//de la class Ecouteur
     
    		JPanel pa2 ;
    		pa2 = new JPanel () ;						// Panel  gerer par
    		FlowLayout fl2;								// FlowLayout
    		fl2 = new FlowLayout () ;
    		pa2.setLayout (fl2);
    		this.add(pa2, BorderLayout.CENTER) ;	//Au centre et de couleur Jaune
    		pa2.setBackground(Color.YELLOW);
    			Couleur coul;					  	//Panel Contenant 3 panneau pour les 3 class:
    			coul= new Couleur (this);			//	couleur, forme, contenu
    			pa2.add(coul);
    			Forme form;
    			form= new Forme(this);
    			pa2.add(form);
    			Contenu cont;
    			cont= new Contenu (this);
    			pa2.add(cont);
     
    		this.setLocationRelativeTo(null);		// Fenetre au centre de l'interface
    		this.pack();						//  Taille automatique en fonction des elements  
    		this.setVisible (true); 				// fenetre rendu visible
    	}
    	public void majuscule () {       		  // Fonction majuscule de l'ecouteur ec2 de la class 
    		String s ;								// 			Forme
    		s=lab.getText();
    		s=s.toUpperCase() ;
    		lab.setText( s );
    	}
    	public void minuscule (){				//  Fonction minuscule de l'ecouteur ec3 de la class
    		String s;								//				Forme
    		s = lab.getText();
    		s = s.toLowerCase();
    		lab.setText( s );
    	}
    	public void droite () {								// Fonction alignement a droite de ec4 
    		lab.setHorizontalAlignment(JLabel.RIGHT);		//de la class Forme
    	}
    	public void gauche (){							// Fonction alignement a gauche de ec5 
    		lab.setHorizontalAlignment(JLabel.LEFT);	
    	}
    	public void centre () {							//Fonction alignement au centre de ec6 
    		lab.setHorizontalAlignment(JLabel.CENTER);			
    	}
    	public void couleurtexte () {						//Fonction changement de couleur du texte  
    		int position;								//du label  au nord, par ec8 de la class Couleur
    		position = coul.SelectionCouleur() ;
    		lab.setOpaque(true);
    		lab.setForeground(tabcouleur[position]);	
    	}
    	public void couleurfond () {					//Fonction changement de couleur du fond
    		int position;							 	//du label  au nord, par ec10 de la class Couleur
    		position = coul.SelectionFond();
    		lab.setOpaque(true);
    		lab.setBackground(tabcouleur[position]);	
    	}
    	public void changetexte (){						//Fonction changement du texte du label 
    		String s;
    		s=cont.SelectionTexte();
    		lab.setText(s);
    	}
    	public void ajouttexte(){						//Fonction Ajout de texte au JList par 
    		cont.ajout();								//un bouton ajout 
    	}	
    	public static void main(String[] args) {
    		PDT fenetre;
    		       fenetre = new PDT( "PDT - cour " );

    Ma class Contenu contenant l'Ecouteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    public class Contenu extends JPanel { 
    	private JList li;
    	private JTextField tf;
    	private  Vector<String> contenu ;				//Initialisation de l'outil Vector
    	public Contenu (PDT f) {
     
    		contenu=new Vector<String>();		
    		contenu.add("tck-29");				// ajout de contenu dans le Vector
    		contenu.add("tck-11");
    		contenu.add("tck-6");
    		contenu.add("tck-22");
    		contenu.add("tck-13");
    		contenu.add("tck-25");
    		contenu.add("tck-27");
    		contenu.add("tck-14");
    		BorderLayout bl;
    		bl= new BorderLayout ();
    		this.setLayout (bl);
    		JPanel pa;
    		pa= new JPanel();
    		JLabel lab1 ;
    		lab1= new JLabel("CONTENU");				
    		this.add(pa, BorderLayout.NORTH);		//class gerer par BorderLayout 
    		pa.add(lab1);
    		pa.setBackground(Color.PINK);
     
    		JScrollPane Sp;							//ScrollPane pour Asenceur ,
    		li= new JList (contenu);	
    		Ecouteur ec9;
    		ec9= new Ecouteur (9,f);				// renvoie a la fonction de changment de texte
    		li.addListSelectionListener(ec9);
     
    		Sp = new JScrollPane(li);				// dans la Jlist.
    		this.add(Sp , BorderLayout.CENTER);		// ajouter au centre du Border
    		JPanel pan ;
    		pan= new JPanel ();
    		this.add(pan,BorderLayout.SOUTH);		// un panel au sud
    		FlowLayout fl;							// gerer par FlowLayout
    		fl= new FlowLayout ();						
    		pan.setLayout(fl);
    		JTextField tf;							
    		tf= new JTextField(6);
    		pan.add(tf);							// JTextField inclu dans le panel 
     
    		JButton b1;
    		b1= new JButton ("Ajout");				
    		pan.add(b1);							// Un Buton d'ajout inclu dans panel
    		pan.setBackground(Color.PINK);
    		this.setBackground(Color.PINK);
     
    		Ecouteur ec7;								// Ecouteur renvoyant a fonction d'ajout
    		ec7 = new Ecouteur (7,f);
    		b1.addActionListener(ec7);
     
    		}
    	public void ajout() {								// ajoute le texte de la TextField
    		String s ;
    		s = tf.getText();
    		contenu.add(s);
    		li.setListData(contenu);
    	}
    	public String SelectionTexte(){
    		return li.getSelectedValue().toString();		// retourne la Selection
    	}
    }

    Ma class Ecouteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class Ecouteur implements ActionListener, ItemListener, ListSelectionListener {	  // Class ecouteur qui fait  
    		private int code ;																//les actions des ecouteurs
    		private PDT fen;																//declarer.
    		public Ecouteur ( int n, PDT f  ) {
    			code = n ;												//Valeur determiner ensuite pour le switch
    			fen = f;											// variable dans laquelle sera realiser les actions
    		}
    		public void actionPerformed(ActionEvent e) {     //implementation de la methode
    														//		ActionPerformed
    			switch(code){									// Pour realiser les differents choix
    			case 1:
    				System.exit(0);
    				break;
    			case 2:
    				fen.majuscule();							// renvois aux fonctions de type 
    				break;										//Action Performed de la  class fenetre
    			case 3 :
    				fen.minuscule();
    				break;
    			case 4 :
    				fen.droite();
    				break;
    			case 5:
    				fen.gauche();
    				break;
    			case 6:
    				fen.centre();
    				break;
    			case 7 :
    				fen.ajouttexte();	
    			}	
    		}
    		public void itemStateChanged(ItemEvent e) {			//implementation de la methode
    															// itemStateChanged
    			switch(code){
    			case 8:
    				fen.couleurtexte();						// renvois aux fonctions de type
    				break;											//itemStateChanged de la  class fenetre
    			case 10:
    				fen.couleurfond();
    				break;
    			}
    		}
    		public void valueChanged(ListSelectionEvent e) {
    			switch(code){
    			case 9: 
    				fen.changetexte();
    			break;
    			}
    		}
    	}
    }
    Desolé je suis presque novice.

    J'ai pas d'erreurs dans le code mais quand la fenêtre s'ouvre et que je clique sur mon bouton ajout la j'ai :

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at PDT.ajouttexte(PDT.java:104)
    at PDT$Ecouteur.actionPerformed(PDT.java:318)

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    L'erreur est classique, et peut arriver à tout le monde.
    Voici comment j'ai procédé pour trouver l'erreur :
    On part de la pile d'erreur donnée lors de l'exécution :

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at PDT.ajouttexte(PDT.java:104)
    at PDT$Ecouteur.actionPerformed(PDT.java:318)

    Un NullPointerException, c'est un appel de méthode sur un objet qui n'a pas été instancié. On regarde donc le haut de la pile : cela vient de la méthode "ajouttexte" dans la classe PDT. On regarde son code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public void ajouttexte(){
    		cont.ajout();
    	}
    C'est donc l'objet "cont" qui est null car il n'y a qu'une instruction dans la méthode : on ne peut pas se tromper ;-)

    Ensuite, on regarde la visibilité de "cont" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	private Contenu cont;
    Seul le constructeur ou une méthode de la classe peut le construire. En cherchant, le seul moment ou on le construit est dans le constructeur. On regarde donc de plus près :


    Class Principal (PDT):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class PDT extends JFrame { 
    ...
    	private Contenu cont;
    	public PDT (String t) {
    ...
    			Contenu cont;
    			cont= new Contenu (this);
    ..
    	}
     
    ...
    Et voila : dans le constructeur, on initialise une variable locale au lieu de la donnée membre. Une fois sortie du constructeur, la variable locale "cont" est perdue. Donc la donnée membre n'est jamais initialisée.
    Il faut supprimer la ligne :
    Desolé je suis presque novice.
    Novice n'est pas une excuse, mais une explication tout au plus
    Etre novice est une chance, car tu n'as pas encore pris de mauvaises habitudes
    Ta démarche est bonne : poser des questions, vérifier par soi-même, et encore poser des questions.
    Bon courage !

  6. #6
    Nouveau membre du Club Avatar de elmander
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 37
    Points
    37
    Par défaut merci
    Déjà merci beaucoup de ton aide, je sens que le programme va mieux :p
    Mais un problème semble persisté...

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at PDT$Contenu.ajout(PDT.java:280)
    at PDT.ajouttexte(PDT.java:103)
    at PDT$Ecouteur.actionPerformed(PDT.java:317)


    Apparemment se serait donc encore un problème d'initialisation :s

  7. #7
    Nouveau membre du Club Avatar de elmander
    Inscrit en
    Janvier 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Janvier 2009
    Messages : 54
    Points : 37
    Points
    37
    Par défaut merci
    Évidemment vu que la variable tf du JTextField était initialisé deux fois,
    dans la class contenu et en private un peu plus haut...

    deux même erreurs!! je commences a comprendre

    bon bah tout marche c'est nikel merci bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de selection dans une JList
    Par Marc_3 dans le forum Débuter
    Réponses: 1
    Dernier message: 27/03/2013, 13h26
  2. probleme d'ajout dans une table
    Par diamentelle dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2009, 16h57
  3. Probleme d'ajout dans une map
    Par parano dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 12/04/2007, 16h05
  4. Réponses: 14
    Dernier message: 22/09/2005, 16h49
  5. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo