Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1409 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [SWING] positionnement dynamique de composants

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SWING] positionnement dynamique de composants

n°653276
FrigoAcide
Posté le 24-02-2004 à 15:47:43  profilanswer
 

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
mood
Publicité
Posté le 24-02-2004 à 15:47:43  profilanswer
 

n°653338
FrigoAcide
Posté le 24-02-2004 à 16:47:31  profilanswer
 

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

n°653481
R3g
fonctionnaire certifié ITIL
Posté le 24-02-2004 à 18:19:04  profilanswer
 

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.
n°654335
FrigoAcide
Posté le 25-02-2004 à 11:14:07  profilanswer
 

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 ?

n°654458
R3g
fonctionnaire certifié ITIL
Posté le 25-02-2004 à 13:13:12  profilanswer
 

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.
n°654537
FrigoAcide
Posté le 25-02-2004 à 14:22:45  profilanswer
 

Merci pour ces précisions :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [SWING] positionnement dynamique de composants

 

Sujets relatifs
creation bouton dynamique/lien dynamiqueVariable dynamique dans excel ?
liste deroulante dynamiqueallocation dynamique
impression de plusieurs pages d'un tableau dynamique avec catégorieJ'arrive pas à lancer des applet SWING !!!!
Faire des lien dynamiqueApplication Java Swing et Windows Terminal Services
CSS, DIVs, positionnement : IE va me rendre fou ...[ASP.Net] Comment remplir une textBox de facon dynamique ?
Plus de sujets relatifs à : [SWING] positionnement dynamique de composants


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR