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 :

Changer texte JButton via une boucle


Sujet :

AWT/Swing Java

  1. #21
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Il faut que je trouve autre chose, là ! L'avantage c'est que les boutons je pouvais les griser si la chambre était occupé ou en maintenance maintenant dans une combo c'est peu plus délicat.
    Avec une JList, tu peux aussi griser les chambres occupées.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #22
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Je plussoie la JList, c'est plus pratique qu'un TextField ou une armé de bouton. En plus, tu pourras mettre un champ de recherche simplifié pour faire un genre d’auto-complétion
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  3. #23
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Phase 1
    Purée ! Ça me gonfle !!!!
    Meuh non ... on va te trouver un truc qui marche avec le bel écran que tu as fais avec NetBeans.

    c'est plus pratique qu'un TextField ou une armé de bouton
    Oui c'est vrai, cependant, sa maquette montre qu'on voit les chambres par rangée de 5.
    Dans l’hôtellerie et la restauration c'est une présentation classique sur les écrans tactiles.
    C'est plus rapide qu'un JList car on clique directement dessus.

    Comment faire ?

    Il faut utiliser le meilleur des deux façons de construire un écran :
    - NetBeans et sa palette pour faire la mise en page chouette
    - la programmation à la main (pour faire plaisir à nchal) pour remplir ton panneau avec les boutons : ici plus question de faire 300 boutons à la main.

    La solution pour garder ta présentation en bouton par rangé de 5 c'est d'utiliser un JPanel avec un FlowLayout.
    Chaque fois que tu ajoutes un bouton dessus, il viendra se ranger sagement et automatiquement.

    Fait un test avec NetBeans :
    1) tu ouvres un JFrame
    2) avec la palette, tu ajoutes un JPanel et tu lui donne tout de suite une couleur (Background vert par exemple) pour bien le repérer sur ton JFrame
    3) tu fais un clic-droit sur le panneau et tu choisis Set Layout -> FlowLayout
    4) catastrophe : NetBeans vient de réduire ton panneau à un carré de 10 pixels de large !
    5) tu contre-attaque à la souris, tu forces ton panneau à la dimension 250 (largeur) X 400 (hauteur)
    Tu as un joli panneau vert. Maintenant, il est temps de le remplir de boutons.
    Tu vas dans le constructeur de ton JFrame et tu ajoutes après initComponents() le petit bout de code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            initComponents();
     
            int nbChambres = 47;
            Dimension dimension = new Dimension(45, 30);
            for (int i = 1; i <= nbChambres; i++) {
                String numChambre = String.valueOf(i);
                JButton button = new JButton(numChambre);
                button.setPreferredSize(dimension);
                jPanel1.add(button);
            }
    Sous tes yeux émerveillés viennent s'aligner tes 47 chambres ...

    Ah ben oui mais le panneau est trop grand ... et puis si j'ai 1.000 chambres comment je fais ???
    ... patience petit scarabée. Essaye déjà l'exemple et je donne la suite (JScrollPane) au prochain numéro.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Personnellement, je proscris toute solution qui repose sur des dimensions (préférentielles ou autres) imposées en dur dans le code. Pourquoi ? Parce que j'ai des clients qui veulent choisir des tailles de polices à leur convenance. En particulier, certains qui ont des problèmes de vue et qui choisissent une police de 48 sans quoi ils n'arrivent pas à lire. Si les boutons ont une taille préférentielle de 45x30, la plupart des nombres sont illisibles. En plus, gérer des boutons qui ne représentent pas systématiquement la même action, imposent d'avoir un actionListener adaptable (ou alors on ne change pas que les textes des boutons, mais aussi leur commande, ce qui peut fonctionner dans un cas aussi simple, mais qui peut devenir plus gênant dans le cas général). Je persiste sur le fait que le JList est le composant le plus adapté pour faire des "claviers" virtuels variables (et pas que sous forme de grille "carrée" d'ailleurs) : bien sûr, on aura pas un pur rendu de bouton, avec l'effet "qui s'enfonce", mais on peut avoir un rendu tout à fait valable, avec un code plus simple pour modifier le contenu (et qui évite d'avoir à ajouter ou sortir des JButtons de leur conteneur régulièrement), à mon humble avis. Il juste dommage de ne pas avoir filtres et tris en standard, comme pour JTable (mais pour le coup, c'est encore plus sioux à faire avec une ribambelle de boutons dans un flowlayout). Le seul avantage peut-être du flowlayout pourrait d'avoir un effet plus "symétrique" (en FlowLayout.CENTER) pour la dernière ligne, s'il y a moins de boutons que sur les autres.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Merci à tous pour vos réponses (je suis sur que si on regarde tous mes posts je répond toujours la même chose), j'ai bien lu toutes vos propositions et j'ai tranché ... Je vais mettre un stylo, une feuille et ils noteront eux mêmes.
    Non ! Je plaisante ! Je n'ai pas de favoritisme (ça aussi je l'ai déjà dit) mais je vais partir sur la solution à Joël qui me paraît plus simple à mettre en oeuvre après pour ne pas faire de jaloux, la solution de Népomucène aurait été tout aussi bien voir mieux pour le côté esthétisme qui reste pour moi un atout majeur pour un logiciel.
    Je vais donc faire au mieux pour apporter une belle présentation à mon logiciel et je vous ferez une petite capture d'écran pour présenter ma version finale.

    Merci à tous pour votre aide et à bientôt (dans 5mn je pense )

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    En fait ! Etant un peu curieux j'ai essayé ton code Népomucène et l'ai mis en oeuvre, j'avoue que c'est très chouette ! Tu aurais possibilité le n° 2 (le scrollbar) ?

    Merci d'avance

  7. #27
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Phase 2
    Voilà comment faire tenir le panneau de 250 (largeur) X 400 (hauteur) dans un JScrollPane de 260 X 200.
    Le JScrollPane va servir de fenêtre sur le JPanel.

    On revient à notre JFrame que tu as construit.
    1) avec la souris, tu fais glisser le JScrollPane de la palette dans ton JFrame à côté du JPanel à bouton
    (nchal va me faire les gros yeux mais tant pis ...)
    2) toujours à la souris, tu dimensionne le JScrollPane à 260 X 200
    3) tu fais glisser le JPanel DANS le JScrollPane (tu vises le centre du JScrollPane avec le coin supérieur gauche du JPanel)
    4) NetBeans étant un sérieux plaisantin, il est capable d'avoir changé les PreferredSize du JPanel. Aussi, tu vérifies dans les propriétés du JPanel que PreferredSize est bien à 250 X 400.

    Tu relances le JFrame et tu vois que ton JScrollPane fais la fenêtre sur ton panneau boutons.

    Ah ben ça alors ! c'est tout ?
    ... ben oui !

    du coup tu peux augmenter ton nombre de chambres en augmentant nbChambres et en ajustant le PreferredSize du JPanel
    tout en gardant la même taille du JScrollPane ...

    Euh oui mais ... si je clique sur un bouton il ne se passe rien ...
    ... patience petit scarabée. La suite au prochain numéro.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #28
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Phase 3
    Enfin comment comment faire pour que chaque bouton déclenche un traitement sur la chambre concernée ?
    on suppose que le traitement est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        private void traitementChambre(String numChambre) {
            System.out.println("Je fais quelque chose avec la chambre n° " + numChambre);
        }
    Oui, oui, je sais. Ce n'est pas très spectaculaire mais je suis sûr que tu sauras y mettre le traitement idoine.

    Pour que chaque bouton appelle traitementChambre avec le bon numéro, on modifie un peu le constructeur pour ajouter un ActionListener à chaque bouton créé :
    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
            initComponents();
    
            int nbChambres = 47;
            Dimension dimension = new Dimension(45, 30);
            for (int i = 1; i <= nbChambres; i++) {
                final String numChambre = String.valueOf(i);
                JButton button = new JButton(numChambre);
                button.setPreferredSize(dimension);
    
                button.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        traitementChambre(numChambre);
                    }
                });
    
                jPanel1.add(button);
            }
    Tu noteras au passage que numChambre est devenu "final" car à chaque bouton créé, on crée aussi un ActionListener.
    Cet ActionListener intègre donc le numChambre qui ne doit pas être modifié.

    Bon, ben ... il n'y a plus qu'à essayer.

    Conclusion :
    Dans ce mini tuto, j'ai utilisé au maximum la palette de NetBeans qui rend d'excellents services pour la création rapide d'écran du genre "fiche client".
    Après, il ne faut surtout pas négliger la bonne maîtrise des Layout car ils sont indispensables pour bâtir les bouts d'écran pour lesquels NetBeans ne peut rien faire.
    En utilisant le meilleur des deux, tu peux avancer rapidement.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Merci Népomucène por tous ses bons conseils que j'ai mis en application, j'ai testé et le rendu est pas mal ... Comme on dit : "Il n'y a que les imbéciles qui ne changent pas d'avis !".
    Je vais essayer les 2 techniques (celle de Joël et la tienne), en tout cas, tout ce que je peux te dire : "C'est que tu as fait de l'excellent travail car tu m'as alloué un peu de ton temps et ton tuto est vraiment excellent !!" Alors encore Merci.

    Je n'oublierai pas de vous faire un petit retour rapide de mon GUI mais en attendant un grand MERCI pour votre aide si précieux.

    Le petit scarabée vous souhaite une bonne journée et à très bientôt

  10. #30
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Mais ce n'est pas tout-à-fait fini là... il reste la gestion de tes filtres, non ? Et tu parlais d'avoir des boutons désactivés pour les chambres occupées...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #31
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Alala, cette manie de vouloir à tout pris cliquer sur des boutons ^^
    La déclaration d'un FLowLayout ça prend une ligne et le add de chaque bouton, bah 1 ligne ^^ je vois pas en quoi c'est plus compliqué que passer par la palette (je suis mauvaise langue, il faut aussi 1 ligne pour ajouter le FlowLayout dans le contentPane )
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Alors je vais répondre dans l'ordre décroissant !
    @nchal : Promis ! Dès que j'ai fini ce projet, j'en ferai exprès pour toi tout en manu mais en fichier txt s'il le faut après, j'essaie aussi d'avoir une note qui dépassera le 10/20 (en dessous je serai un peu déçu vu le mal que je me suis donné à le faire et encore il est fini) donc je mise un peu sur les GUI, une belle présentation pourra peut-être me rapporter quelques points (je l'espère).

    @Joël : Tu dois être devin car ça fait 2 fois que tu me corriges dans mon projet, la 1ère avec l'histoire de mes boutons où je voulais en mettre que 30 et qui au final c'est avéré que c'était extensible et maintenant tu m'évoques les filtres.
    Effectivement j'ai omis ceux-ci donc j'ai encore du pain sur la planche avec ces boutons ... je vais allez voir le dermato, il aura peut être une solution Après au niveau des boutons à griser au pas, j'ai fait un essai sur un ça fonctionne mais peut-être qu'il faut que je m'organise à créer une classe où je vais gérer tout ceux-ci ???

    @Népomucène : Alors j'ai tout fait comme tu l'as écrit et ça fonctionne très bien, en revanche, je viens de me rendre que j'avais un soucis avec la scrollbar. Si je dépasse la taille indiqué en hauteur je ne vois plus les boutons, d'ailleurs dans ton exemple tu en créé 47 et il n'y en a que 33 d'affichés. J'ai peut être oublié de renseigner une propriété ???

    Merci à tous !

  13. #33
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    @Joël : Tu dois être devin car ça fait 2 fois que tu me corriges dans mon projet, la 1ère avec l'histoire de mes boutons où je voulais en mettre que 30 et qui au final c'est avéré que c'était extensible et maintenant tu m'évoques les filtres.
    Effectivement j'ai omis ceux-ci donc j'ai encore du pain sur la planche avec ces boutons ... je vais allez voir le dermato, il aura peut être une solution Après au niveau des boutons à griser au pas, j'ai fait un essai sur un ça fonctionne mais peut-être qu'il faut que je m'organise à créer une classe où je vais gérer tout ceux-ci ???
    Pour adapter la solution avec boutons, ce n'est pas très compliqué. Déjà crée-toi une méthode qui crée les boutons (mettons creerBoutonsChambres): déplaces-y ce que @Népomucène t'a fait faire. Parce qu'il faut créer les boutons à 2 moments : lorsqu'on initialise (là où tu le fais actuellement) et quand on modifie le filtre (les radiobuttons). Donc, appelle-là bien sûr à l'endroit où elle se trouve actuellement, pour commencer.
    Ensuite, moi, je la modifierais un peu :
    1. La version simple : au lieu de faire un for(int i=0; i<nombreDeChambre; i++), je ferais un for(int numChambre : numChambres), ou numChambres est un int[] qui contient les numéros de chambres qui correspondent à ton filtre. Ce qui va te permettre de créer non plus toutes les chambres, mais seulement une liste déterminée par les radiobuttons de filtrage.
    2. La version un peu plus complexe, mais plus objet : faire une classe Chambre, et un tableau de Chambre au lieu d'un tableau de int. Passer la chambre à l'actionListener au lieu du numéro de permettra de manipuler directement la bonne chambre dans l'action listener.

    A chaque fois que ton filtre change, tu appelles une méthode qui va régénérer les boutons (mettons, recreerBoutonsChambres()): (quand je dis "à chaque fois que ton filtre change", tu dois penser "listener" ou écouteur en français, écouteur d'évenements : sur les radiosbuttons, on peut écouter les changements de sélection par un actionListener, comme pour un JButton.)
    1. elle déternine le tableau d'entiers (ou de Chambre) correspondant aux choix dans tes radiobuttons
    2. Elle supprime tous les boutons existants dans le panel de boutons (removeAll())
    3. elle appelle la méthode qui créé tous les boutons (creerBoutonsChambres, celle qui contient le code de @Népo)
    4. Elle fait revalidate() sur le panel, puis repaint(), pour mettre à jour tout l'affichage en fonction des nouveaux boutons


    Pour la gestion des chambres occupées,
    • La version simple : lorsque tu crées les boutons, avec l'objet Chambre, tu peux faire directement :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      button.setEnabled( !chambre.estOccupee() );
    • La version complexe, c'est que la chambre peut devenir occupée alors qu'on a déjà créé le bouton : on ne va pas créer à nouveau tous les boutons pour changer juste le bouton de la chambre qui nous intéresse. Pour gérer ça simplement, on pourrait utiliser une Map<Chambre, JButton>, ou Map<Integer, JButton> (ou l'Integer est le numéro de chambre). Avec la map, tu peux retrouver directement le bouton sur lequel il faut appeler setEnabled() avec la bonne valeur en fonction du fait que la chambre est devenue occupée, ou s'est libérée.
    • J'ai une version encore plus complexe, mais plus objet, où on se créerait sa propre classe de bouton, mais je vais t'épargner ça. Tu auras bien l'occasion de voir ce genre de chose plus tard.




    @Népomucène : Alors j'ai tout fait comme tu l'as écrit et ça fonctionne très bien, en revanche, je viens de me rendre que j'avais un soucis avec la scrollbar. Si je dépasse la taille indiqué en hauteur je ne vois plus les boutons, d'ailleurs dans ton exemple tu en créé 47 et il n'y en a que 33 d'affichés. J'ai peut être oublié de renseigner une propriété ???
    A mon avis, c'est dû au fait que le panel (le panel, pas le scrollpane) dans lequel tu mets les boutons à une taille fixe, alors que sa hauteur devrait dépendre du nombre de boutons (exactement du nombre de lignes de boutons). Ce qui devient un tout petit peu plus complexe à calculer (alors qu'avec une JList, ça le ferait tout seul - sans vouloir insister) : enfin, pas tant que ça, parce que tes boutons ont une taille fixe.
    La hauteur étant égale à le nombre lignes * la hauteur d'un bouton + le nombre de lignes - 1 * l'espacement vertical entre bouton (l'espacement vertical par défaut dû au FlowLayout, que tu peux obtenir la méthode FlowLayout.getVgap()). Le nombre de lignes étant égal à la division entière du nombre de boutons total (donc de chambre) par le nombre de boutons en largeur, + 1 ligne éventuelle, s'il y a un reste à cette division non entière. Le nombre de bouton par lignes étant égal à la division entière de la largeur du panel - un espacement horizontal (getHGap()), par la largeur d'un bouton + l'espacement horizontal. Quand je disais que c'était un petit peu complexe...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #34
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Bon déjà, je te félicite pour ton humour.

    Ensuite, je n'ai pas posté à la suite de Joël sur le filtre et le grisé car j'attendais de voir ce que tu en disais toi-même.
    Au vu de ton écran, il est bien évident que choisir une chambre 1 ou 2 personnes va automatiquement impacter sur la liste des boutons (ça aussi il faut que tu en parles au dermato)

    1) le filtre :
    Dans mon exemple de solution, les boutons sont créés dans le constructeur.
    C'était, bien entendu, pour faire fonctionner l'affichage des boutons.
    Dans la pratique, ce code de génération de bouton doit se déclencher par le choix du type de chambre par l'utilisateur : code d'évènement donc.
    Tu dois donc avoir une liste des chambres avec leur type et ne générer que les boutons correspondants.
    Dans l'idéal, cette liste est dans une base de données (est-ce déjà le cas ?)

    2) le grisé :
    Il découle de la remarque précédente : en parcourant la liste des chambres la base doit aussi indiquer pour chaque chambre si elle est dispo ou non.
    Si elle n'est pas dispo alors ajoute au bouton un "setEnable(false)" qui va bloquer le cliquage et modifier l'aspect du bouton : le but est atteint.

    3) le JScrollbar qui ne va pas au bout :
    Il faut faire un calcul :
    dimension du bouton en hauteur : 30
    espace entre chaque bouton : 5
    donc hauteur par "ligne de bouton" = 30 + 5 = 35
    on a 5 boutons par ligne. si tu as un hôtel avec 47 chambres, tu as : 47 / 5 = 9,4 lignes donc 10 lignes de boutons.
    on a une hauteur nécessaire pour le JPanel de 35 X 10 = 350
    on ajoute encore 5 pour l'espacement final et on arrive à 355

    Donc voilà comment ça se danse :
    - le déclencheur est le choix des chambres par l'utilisateur
    - tu fais un comptage de celles de la catégorie que tu mets dans nbChambres (int)
    - avant d'ajouter les boutons, tu retires ceux qui s'y trouvent déjà avec "jPanel1.removeAll();"
    - tu définis la taille du JPanel avec le procédé vu au-dessus

    EDIT : Joël comment tu fais pour écrire à cette vitesse ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #35
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Hé bien Messieurs (j'espère ne pas me tromper mais je vous rassure je n'ai rien contre le sexe féminin bien au contraire je n'en côtoie pas assez dans le milieu de l'informatique) ! J'ai le plaisir de vous annoncer que tout fonctionne à merveille, si ce projet arrive à terme (mais avec un appuie comme le votre je suis optimiste) et qu'il ce vend (je plaisante ! C'est pour ma note finale mais après qu'est ce que va en faire le prof ???) je fais fifty ! fifty ! C'est quand même grâce si j'en suis là aujourd'hui.

    Je voulais rebondir sur la phrase à Népomucène
    EDIT : Joël comment tu fais pour écrire à cette vitesse ?
    , c'est vrai qu'il a raison tu es dactylo ou quoi ou alors tu utilises Siri pour écrire

    Je voudrais terminer sur ceci :
    J'ai un problème dans le refresh de ma fenêtre de réservation lorsque je fais une modif sur une chambre (ex : création d'un nouveau room), celle ne s'ajoute pas dans ma fenêtre principale, ce qui est logique dans le sens ou je ne rappelle rien.

    Auriez-vous une idée sur comment faire ?

    Merci d'avance.

  16. #36
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    J'ai un problème dans le refresh de ma fenêtre de réservation lorsque je fais une modif sur une chambre (ex : création d'un nouveau room), celle ne s'ajoute pas dans ma fenêtre principale, ce qui est logique dans le sens ou je ne rappelle rien.
    Tu veux dire quand tu crées une nouvelle chambre ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  17. #37
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    J'ai ma fenêtre principale "Accueil" qui contient un menu dans le lequel j'ai un item qui s'appel "Chambre". Quand je clique dessus, j'ai une nouvelle fenêtre qui s'ouvre (une nouvelle jFrame), je fais des modifs dans celle-ci (exemple : Création d'une nouvelle chambre) et quand je la ferme (this.dispose) je n'ai pas l'actualisation de mes fenêtres dans la fenêtre Accueil.
    Certes, c'est tout à fait normal mais comment je peux dire à am fenêtre accueil qu'il faut que je rafraîchisse les données ?

    Je sais pas si tu as compris ce que j'ai essayé de t'expliquer mais si tel est le cas, je ferai des captures d'écran.

    Merci d'avance.

  18. #38
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu as déjà posé cette question dans cette autre discussion. Tu devrais continuer dans l'autre discussion. Déjà parce qu'on t'y a répondu. Et en plus, parce que c'est un autre sujet que celui abordé dans celle-ci, passée en plus en résolue.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #39
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    C'est exact Joël mais j'ai essayé avec les événements dont nchal m'a indiqué de regarder mais je n'ai rien trouvé. N'ayant pas eu d'autres réponses après, je me suis permis de rajouter celle-ci dans ce post car vous êtes très présent.
    Je m'excuse d'avoir réitéré mon sujet dans ce post et s'il faut que je retire mes questions ... je le ferai mais merci à tous pour m'avoir aidé à solutionner mon histoire de jButton.

    Désolé et merci !

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Bonsoir à tous !

    J'ai ré-ouvre ce post pour avoir un complément d'information concernant les jButtons ou plutôt j'ai remplacé les jButtons par des jToggleButtons.
    Au niveau de la construction aucun soucis tout fonctionne (la scrollbar, les jToggleButtons, le grisé, etc) en revanche comment est ce que je peux faire lorsque l'utilisateur va cliquer sur un autre bouton pour remettre à off celui qui est actif ?

    Bon ! Si vous avez compris ce que j'ai dit ... c'est royal !

    Merci d'avance à tous.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Changer le CHMOD via une cmd FTP
    Par bilal_54 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 3
    Dernier message: 09/10/2008, 23h29
  2. Insertion de champ via une boucle
    Par mat67000 dans le forum Access
    Réponses: 13
    Dernier message: 26/06/2007, 13h53
  3. Réponses: 9
    Dernier message: 14/02/2007, 17h28
  4. Auto commit via une boucle
    Par magic charly dans le forum Sql*Plus
    Réponses: 7
    Dernier message: 06/12/2006, 15h01
  5. Réponses: 4
    Dernier message: 26/08/2004, 08h01

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