[SWING] positionnement dynamique de composants

positionnement dynamique de composants [SWING] - Java - Programmation

Marsh Posté le 24-02-2004 à 15:47:43    

Salut à tous,  
 
j'utilise Swing et j'ai rencontré des problèmes en voulant placer des composants de façon dynamique. J'ai crée un petit programme qui illustre le problème : en cliquant sur le bouton, le panel associé à la jframe doit changer, et avec lui la couleur de fond.
 

Code :
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. public class test extends JFrame implements ActionListener {
  5.     //le bouton qui doit changer la couleur de fond
  6.     JButton btn = new JButton ("change !" );
  7.     //pnlA sera le panel rouge, pnlB le panel bleu, et aux contient
  8.     //le panel courant
  9.     JPanel pnlA = new JPanel (), pnlB = new JPanel (), aux;
  10.     public test() {
  11. //affectation des couleurs
  12. this.pnlA.setBackground(Color.red);
  13. this.pnlB.setBackground(Color.blue);
  14. //ajout de l'écouteur d'événement
  15. this.btn.addActionListener(this);
  16. //je configure la jframe générale pour qu'elle affiche le panel en haut
  17. //et le bouton en bas
  18. super.getContentPane().setLayout(new BorderLayout ());
  19. //le premier panel à afficher sera le rouge; on peut mettre pnlB à la place
  20. aux = this.pnlA;
  21. //appelle de ma méthode
  22. this.affiche();
  23. super.setBounds(100, 100, 400, 400);
  24. super.setVisible(true);
  25.     }
  26.     public void affiche () {
  27. //je "nettoie" la frame générale
  28. super.getContentPane().removeAll();
  29. //j'ajoute le bouton en bas, et le panel courant au centre
  30. super.getContentPane().add(BorderLayout.SOUTH, this.btn);
  31. super.getContentPane().add(BorderLayout.CENTER, aux);
  32. //je tente de rafraichir la jframe
  33. super.repaint();
  34. //je change le panel courant pour changer de couleur au prochain appel
  35. if (this.aux.equals(this.pnlA)) this.aux = this.pnlB;
  36. else this.aux = this.pnlA;
  37.     }
  38.     //si l'utilisateur appuie sur le bouton
  39.     public void actionPerformed (ActionEvent ae) {
  40. this.affiche();
  41.     }
  42.     static public void main (String[] args) {
  43. new test ();
  44.     }
  45. }


 
Là quand je clique sur le bouton, le fond devient gris au lieu de prendre la couleur rouge ou bleu !
 
Quelqu'un peut m'aider ? Merci :)


Message édité par FrigoAcide le 24-02-2004 à 15:48:23
Reply

Marsh Posté le 24-02-2004 à 15:47:43   

Reply

Marsh Posté le 24-02-2004 à 16:47:31    

C'est bon, j'y arrive en utilisant CardLayout.

Reply

Marsh Posté le 24-02-2004 à 18:19:04    

J'ai comme l'impression que tu as compris quelquechose de travers concernant l'héritage. Quand tu étend JFrame, ta classe hérite de toutes les propriétés et les méthodes de JFrame. Donc c'est inutile de préciser super. quand tu appelle une méthode de JFrame, tu peux mettre this. et ça marche aussi. Je pense pas quece soit la cause de ton problème, mais ça pourrait te jouer des tours un jour...


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 25-02-2004 à 11:14:07    

R3g a écrit :

J'ai comme l'impression que tu as compris quelquechose de travers concernant l'héritage. Quand tu étend JFrame, ta classe hérite de toutes les propriétés et les méthodes de JFrame. Donc c'est inutile de préciser super. quand tu appelle une méthode de JFrame, tu peux mettre this. et ça marche aussi. Je pense pas quece soit la cause de ton problème, mais ça pourrait te jouer des tours un jour...


 
Ouais c'est aussi la première chose qu'on m'a dit quand j'ai posté ce topic sur un autre forum. C'est vrai que je suis pas obligé d'utiliser super, ni même this d'ailleurs : je peux très bien ne rien mettre.  
 
Perso je mets les mots clés this et super parce que c'est plus clair dans ma tête comme ça. Mais est-ce qu'il ne faut pas le faire ? Quand super est-il utile alors ?

Reply

Marsh Posté le 25-02-2004 à 13:13:12    

FrigoAcide a écrit :


 
Ouais c'est aussi la première chose qu'on m'a dit quand j'ai posté ce topic sur un autre forum. C'est vrai que je suis pas obligé d'utiliser super, ni même this d'ailleurs : je peux très bien ne rien mettre.  
 
Perso je mets les mots clés this et super parce que c'est plus clair dans ma tête comme ça. Mais est-ce qu'il ne faut pas le faire ? Quand super est-il utile alors ?

super est utile par exemple pour appeler une methode de ta classe mère que tu aurais redéfini dans ta classe fille. Ex :

Code :
  1. public class Mere {
  2.     public void sayHello() {
  3.         System.out.println("Bonjour je suis maman" );
  4.     }
  5. }
  6. public class Fille extends Mere {
  7.     public void sayHello() {
  8.         System.out.println("Bonjour je suis sa fille" );
  9.     }
  10.     public void test() {
  11.         sayHello(); // appelle la méthode de fille
  12.         super.sayHello(); // appelle la méthode de mère
  13.     }
  14. }


Alors effectivement je ne pense pas que ça pose de problème dans ton cas d'utiliser super quand c'est inutile, mais il vaut mieux éviter car ça peut provoquer des confusions dans certains cas.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 25-02-2004 à 14:22:45    

Merci pour ces précisions :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed