Conception Swing Java

Fermé
Nico - 14 juin 2006 à 10:55
 Nico - 14 juin 2006 à 13:07
Bonjour,

J'ai deux questions plutot générale concernanant la mise en place d'une interface Swing en JAVA.

Imaginons une classe tres simple et son constructeur

public class Window extends JFrame{
JFrame jf;
JPanel jp;
public Window(){
jf = new JFrame();
jp = new JPanel()
jp.setLayout = new FlowLayout();
jp.add(new JLabel("toto"));
jf.add(jp);
}
}

Jusque la pas de pb.
Imaginons que je rajoute un ActionListener a ce petit code, et que dans la methode actionPerformed() je lui demande de me rajouter un conteneur à mon JPanel par ex. Je passe les details ...

public void actionPerformed (ActionEvent evt){
Object source = evt.getSource();
jp.add(new JLabel("titi"));
}
}

Comment se fait-t-il que ca ne fonctionne pas ? pourtant l'objet JPanel jp est bien global ! Alors pourquoi ne me le rajoute -t-il pas ?

Deuxieme chose un peu liée ; si je crée un nouvelle classe qui possède un Jpanel, et sa propre structure ... Je ne peux pas faire non plus
jp.add(new Manouvelleclasse());

Pour etre plus concret, j'ai une classe principale qui crée un JFrame coupé en deux, le panel de gauche pour entrer des parametres et celui de droite pour afficher un graph. Donc dans le panel de droite, je voulais créer une nouvelle instance de ma classe faisant le graph mais ca ne marche pas comme je l'ai decrit précedemment ?

Merci pour vos explications !
nico
A voir également:

1 réponse

Pool Orion Messages postés 124 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 15 juin 2007 55
14 juin 2006 à 11:19
Salut Nico,

Pour commencer, j'ai détecté une petite erreur dans ton code exemple :

public class Window extends JFrame{
JFrame jf;
JPanel jp;
public Window(){
jf = new JFrame();
jp = new JPanel()
jp.setLayout = new FlowLayout();
jp.add(new JLabel("toto"));
jf.add(jp);
}
}

=> tu ne peux pas ajouter de composant à une JFrame, tu dois l'ajouter au ContentPane. Donc ton code devient :
jf.getContentPane().add(jp);

Ensuite, une petite remarque personnelle sans conséquence sur ta classe, moi j'éviterais de créer une classe appelée Window car un objet très connu existe déjà avec ce nom -> java.awt.Window :-) Mais bon ça c'est à toi de voir.

Maintenant, je vais tenter de t'aider un peu :-)

Dans ton actionPerformed, tu dois revalider le conteneur après la modification donc tu dois ajouter :

jp.validate();
.

N'hésites pas en cas de problème.

0
Ok merci ! je ne commaissais la méthode validate().
J'avais réussi a resoudre le probleme en ajoutant un setVisible(true) dans l'actionPerformed.
En tout les cas, merci du coup de main ;-)
0