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

AWT/Swing Java Discussion :

ajout JcheckBox en cours d'execution


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Par défaut ajout JcheckBox en cours d'execution
    Bonjour à tous !

    Dans l'application que je suis en train de réaliser, j'ai besoin d'ajouter ou retirer des JCheckBox à un JPanel durant l'exécution de mon programme.

    Problème, lorsque j'ajoute ma boite dans le panel, elle n'apparait jamais, même après rafraichissement du panel.

    Pour illustrer ce problème, j'ai créé une petite classe pour générer un panel auquel je tente d'ajouter une boite :

    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
     
    public class InterfaceGraphique extends Thread {
    	private JFrame fenetre;
    	public JPanel panel;
    	private static final int hauteur = 600;
    	private static final int largeur = 800;
     
    	public InterfaceGraphique () {
    		this.fenetre  = new JFrame("Tests CheckBox");
    		panel = new JPanel();
    		this.fenetre.add(panel);
     
    		this.fenetre.setMinimumSize(new Dimension(largeur + 3, hauteur + 53));
            this.fenetre.setLocationRelativeTo(null);
            this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    	protected void setVisible(boolean b) {
    		this.fenetre.setVisible(b);
    	}
     
    	public void run () {
    		InterfaceGraphique ig = new InterfaceGraphique();
            ig.setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		InterfaceGraphique ig = new InterfaceGraphique();
    		ig.start();
    		ig.panel.add(new JCheckBox("test2"));
    		ig.panel.repaint();
    		System.out.println(ig.panel.getComponentCount());
    	}
    }
    Meric d'avance de votre aide !

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 342
    Par défaut
    Bonjour,

    serait-il possible d'ajouter le composant lors de la construction de l'application, et de le rendre simplement visible ou invisible grâce à la méthode setVisible( false ou true );

    @bientôt...

  3. #3
    Membre très actif
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Par défaut
    c'est un problème de threading :

    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
    public class InterfaceGraphique extends Thread {
        private JFrame fenetre;
        public JPanel panel;
        private static final int hauteur = 600;
        private static final int largeur = 800;
     
        public InterfaceGraphique () {
            this.fenetre  = new JFrame("Tests CheckBox");
            panel = new JPanel();
            this.fenetre.add(panel);
     
            this.fenetre.setMinimumSize(new Dimension(largeur + 3, hauteur + 53));
            this.fenetre.setLocationRelativeTo(null);
            this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
     
        protected void setVisible(boolean b) {
            this.fenetre.setVisible(b);
        }
     
        public void run () {
            InterfaceGraphique ig = new InterfaceGraphique();
            ig.setVisible(true);
            ig.panel.add(new JCheckBox("test2"));
        }
     
        public static void main(String[] args) {
            InterfaceGraphique ig = new InterfaceGraphique();
            ig.start();
            //ig.panel.add(new JCheckBox("test2"));
            ig.panel.repaint();
            System.out.println(ig.panel.getComponentCount());
        }
    }

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il ne faut jamais modifier les composants Sqwing en dehors de l'EDT.

    Par contre toute action lourde (connection DB, gros calculs & cie) doivent être réalisés en dehors de l'EDT.

    Dans le cas présent il ne faut surtout pas que ta class InterfaceGraphique hérite de Thread, et encore moins la faire démarrer par un Thread.start, ce qui fait automatiquement sportir l'exécution du code de l'EDT.


    Cf le tutoriel suivant pour comprendre comment gérer les interactions Swing/Threading.
    http://gfx.developpez.com/tutoriel/j...ing-threading/

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2008, 10h44
  2. Ecraser un programme en cours d'execution
    Par Shiva dans le forum Langage
    Réponses: 12
    Dernier message: 05/10/2005, 18h03
  3. Plus la main sur l'appli en cours d'execution..
    Par maddog2032 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/06/2005, 11h49
  4. Trouver le nom de la DLL en cours d'execution
    Par jean31a dans le forum Langage
    Réponses: 10
    Dernier message: 10/05/2005, 09h26
  5. Compacter une appli en cours d'execution.
    Par valentin4949 dans le forum Access
    Réponses: 4
    Dernier message: 26/11/2004, 10h00

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