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 :

JButton qui refuse de se colorer selon le conteneur


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Par défaut JButton qui refuse de se colorer selon le conteneur
    Bonjour à tous,

    J'ai un petit soucis, et j'ai beau regarder et re-regarder mon code, je vois pas mon erreur.
    En gros: j'ai 2 JTabbedPane (conteneur d'onglet) indépendant, dans ma classe principale.
    Dans une 2nd classe, j'ai un ensemble de méthode qui me renvois toutes un JPanel différent.
    Dans l'une de ses méthode, le JPanel renvoyé contient un ensemble de JButton. Sur chacun des JButton il y a un ActionListener qui colore en bleu le bouton sur lequel on a cliqué.

    Le code de déclarations des JButton correspond à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private JButton[][] tabRetr = new JButton[100][2];
    Et dans une boucle, j'ai :
    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
     
    tabRetr[i][x] = new JButton();
    tabRetr[i][x].setIcon(new ImageIcon("..\\data\\img\\i"+i+"_"+x+".png"));
    tabRetr[i][x].setBackground(Color.white);
    tabRetr[i][x].addActionListener(new ActionListener() 
    {
    	final int k = x;
    	final int nouv_i = i;
    	public void actionPerformed(ActionEvent arg0) 
    	{
    		if(tabRetr[nouv_i][k].getBackground().equals(Color.blue))
    		{
                             //Si le bouton est déjà sélectionné, on ne fait rien
    		}
    		else
    		{
                            //Si le bouton n'est pas sélectionné, on le colore en bleu, et on colore en blanc le bouton d'à coté.
    			tabRetr[nouv_i][k].setBackground(Color.blue);
    			tabRetr[nouv_i][k+1].setBackground(Color.white);
    		}
    	}
    });
    Ça, ça fonctionne. Le truc, c'est que si j'ajoute le JPanel dans lequel sont déclarés tous les boutons dans le 1er JTabbedPane, tout fonctionne niquel.
    Par contre, si j'ajoute ce JPanel dans le 2nd JTabbedPane, mon interface graphique se construit bien, mais je n'ai aucune coloration des boutons ! Via des System.out.println() je vois quand dans le cas de ce 2nd JTabbedPane je passe bien dans les "if", que mes variable fixe nouv_i et k ont bien les bonnes valeurs etc etc. mais rien ne se colore :/
    Edit: Sachant aussi que dans le JTabbedPane où ça ne fonctionne pas, j'ai un autre JPanel un peu identique, avec des boutons qui se colore (avec un code presque identique à celui ci), et là, ça fonctionne :/
    Et au niveau de la déclaration de mes JTabbedPane, ils sont déclarés de la même façon.

    J'avoue que mon problème est un peu tordu, mais là je rame vraiment à trouver. Si quelqu'un à une idée, n'hésitez pas :/
    Et si vous voulez d'autres boûts de code, demandez aussi.

    Merci d'avance

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

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

    La première chose à faire serait de simplifier ton code petit à petit. Essaie de te ramener à un JPanel qui contient un tableau de 1 JButton, puis à un JPanel qui contient un JButton.
    Au final, tu pourrais nous présenter le code de tes 2 JTabbedPane et de ton JPanel avec le bouton qui pose problème (si tu ne l'as pas corrigé en simplifiant).

    Là, il y a un peu trop d'infos pour qu'on puisse t'aider.

    Diviser pour mieux régner

  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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Quasiment rien compris.... tu ajoutes ton JPanel simultanément dans deux JTabbedPane différents ?
    Et pourquoi faire autant de boutons ? Ne pourrais-tu pas passer par des dessins, ce qui simplifierait ton code et allègerait la RAM utilisée ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre confirmé Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Par défaut
    Quasiment rien compris.... tu ajoutes ton JPanel simultanément dans deux JTabbedPane différents ?
    Et pourquoi faire autant de boutons ? Ne pourrais-tu pas passer par des dessins, ce qui simplifierait ton code et allègerait la RAM utilisée ?
    Désolé, j'essaye vraiment d'être le plus clair possible, mais j'avoue qu'il y a un peu trop d'info à la fois. Je vais essayer de simplifier:

    Je déclare 2 JTabbedPane, mais ne j'en utilise qu'un. Selon mes besoins, j'affiche l'un ou l'autre à la main (je change l'appel dans le code quoi).
    Quelque soit le JTabbedPane que j'affiche, j'appels le même JPanel. Il n'est donc ajouté qu'à un JTabbedPane à la fois. C'est moi qui change manuellement les JTabbedPane.

    Après pour les boutons j'ai pas trop le choix: l'appli est destinée à des enfants de 5 à 10 ans, donc je préfère vraiment laisser des boutons, sur lesquels on "sait" qu'on peut cliquer. Et si mon tableau de boutons va jusqu'à 100, c'est que j'utilise vraiment 100 paires de boutons.

    Deaf: en simplifiant, j'en suis arrivé à déclarer la couleur de fond à la main, avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabRetr[3][1].setBackground(Color.blue);
    Et ça, sa fonctionne.
    J'ai aussi essayé de faire un tableau de 1 bouton, et ça sa fonctionne pas.

    Pour résumer: la déclaration fixe fonctionne, la déclaration via des variables ne fonctionne pas, même si elle contiennent les bonnes valeurs.

  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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Freeluvs Voir le message
    Après pour les boutons j'ai pas trop le choix: l'appli est destinée à des enfants de 5 à 10 ans, donc je préfère vraiment laisser des boutons, sur lesquels on "sait" qu'on peut cliquer. Et si mon tableau de boutons va jusqu'à 100, c'est que j'utilise vraiment 100 paires de boutons.
    Faux : tu as toujours le choix. Il ne faut pas confondre interface graphique et implémentation. Tu peux très bien passer par du dessin, alors que visuellement il n'y a aucune différence avec un JButton.

    Sinon par curiosité, tu affiches simultanément 200 boutons sur l'interface ? A quoi sert ton application ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Ce n'est pas ton appli finale que je t'ai demandé de simplifier, mais ton exemple, afin que l'on t'aide à trouver le problème.

    Dès que l'on a détecté l'erreur, tu repars sur ton appli corrigéeet tu pourras jetter l'exemple simplifié.

  7. #7
    Membre confirmé Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Par défaut
    dinobogan: l'appli servira pour des enfants dyslexiques. Dans cette partie là, il y un mot d'écrit (genre je sais pas, "banane" par exemple), en face de chaque mot tu as 2 boutons comportant une image (un avec une banane, un avec un ananas pour reprendre l'exemple), et le but est de trouver le bon, en cliquant dessus.
    Et non je n'en affiche pas 200 en même temps: actuellement je dois en avoir une 30aine sur la même page, mais l'appli comporte un module de mise à jour permettant à certains utilisateurs de rajouter leur propre contenu, donc ici, leur propre bouton à image. Donc même si je n'utilise quand 20 case du tableau, le cahier des charge dit que théoriquement on peu monter jusqu'à 100 paires.
    Je sais bien que ma méthode est pas "la plus efficace", mais j'ai testé avec 200 boutons et ça tourne sans un pet sur un vieux vieux PC.
    Mais je vais me renseigner pour ce que tu disais par rapport au dessin, ça peut toujours être bon à prendre.

    Et au final j'ai résolu le problème: enfait même si je n'affichais qu'un seul JTabbedPane, j'instanciais les deux dans la création de l'interface graphique, donc j'avais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    onglets.addTab("Retrouve le dessin",ong_icon, mainFTScroll = new JScrollPane(), "Retrouve le bon dessin et clic dessus.");
    mainFTScroll.setViewportView(panel_Dic.initRetrDessin());
    ....
    onglets_dic.addTab("Retrouve le dessin",ong_icon, scdFTScroll = new JScrollPane(), "Retrouve le bon dessin et clic dessus.");
    scdFTScroll.setViewportView(panel_Dic.initRetrDessin());
    Quand j'appelais "onglets_dic" ça fonctionnait, et quand j'appelais "onglets" ça ne marchais pas car je rappelais la fonction plus bas pour l'autre JTabbedPane.

    Je suis un boulet.
    Merci à vous en tout cas

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

Discussions similaires

  1. Batch (.bat) qui refuse de s'exécuter via le "Scheduler"
    Par camboui dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 28/07/2006, 18h26
  2. Requête DELETE qui refuse de fonctionner chez Free
    Par fafafa dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/06/2006, 15h00
  3. Réponses: 24
    Dernier message: 23/02/2006, 11h04
  4. [JButton]Redéfinir la méthode paint(), colorer le fond.
    Par leminipouce dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/01/2006, 15h51
  5. un service qui refuse de se lancer
    Par unNew dans le forum Windows XP
    Réponses: 3
    Dernier message: 22/10/2005, 01h31

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