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

 Java Discussion :

Toute première application


Sujet :

Java

  1. #41
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    J'ai remplacé tous les mouseListener par votre code. J'ai juste ajouter repaint(); à la fin du code de chaque bouton sinon ça ne fonctionnait pas.
    Et puis, bien entendu, j'ai suivi le reste des conseils (setVisible).
    Et bien ça a l'air de fonctionner parfaitement !!!

    Johny13400 je vous dis un énorme merci, vous avez été d'une aide précieuse et redoutable.
    Je vais faire quelques tests sur différents ordis/configs et je vous tiens au courant.

    (Y'a une raison connue pour que les mouseListener fassent buguer mon programme alors que les actionListener non ?)

  2. #42
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Désoler je n'ai pas de réponse à vous donner pour le MouseListener mais vue que le problème disparaissait quand vous passiez la souris sur le bouton j'ai utiliser l'ActionListener.
    Peut être que cela aurait pu fonctionner en jouant avec les autres méthodes de MouseListener mais je n'ai pas chercher plus loin.

  3. #43
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Bon et bien je confirme, ça fonctionne sur tous les ordis. Encore mille mercis !!!

    J'ai une autre question.
    Supposons que je souhaite ajouter un bouton qui m'enverrais vers une nouvelle page (dans la même fenêtre). Quel angle d'attaque faut-il adopter ?
    J'ai tenté d'instancier une variable X que j'ai initialisée à 0. Ensuite dans mon JFrame, j'ai commencé par if (X == 0) et j'ai construit ma page dedans et je lui ai attribué un ContentPane.
    Comme action sur le bouton sensé me faire changer de page, je lui fait changer la valeur de X en 1 puis j'ai fait un repaint().
    Dans mon JFrame j'ai ajouté une partie if (X == 1) et dedans j'ai changé de ContentPane.

    Résultat, il ne se passe rien. La première page qui s'affiche reste. J'en déduit que mon approche est sûrement mauvaise...

  4. #44
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Je n'ai pas trop le temps mais j'ai fais un petit code qui montre comment passer d'une vue à l'autre.

    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
    public class Fenetre extends JFrame{
     
        private JPanel pan1 = new JPanel();
        private JPanel pan2 = new JPanel();
     
        public Fenetre(){
            this.setSize(300, 300);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setContentPane(pan1);
     
            pan2.setBackground(Color.green);
     
            pan1.setBackground(Color.red);
            JButton button1 = new JButton("pan2");
            button1.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    setContentPane(pan2);
                    revalidate();
                }
            });
            pan1.add(button1);
        }
    }

  5. #45
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup.
    Votre code fonctionne mais il n'efface pas le contenu déjà affiché. Du coup je l'ai couplé avec un repaint(); et ça fonctionne nickel. Mon approche était finalement plus compliquée pour rien.

    Une autre petite question,
    j'ai créé 2 boutons. Le premier contient un texte au format html pour pouvoir bénéficier du saut de ligne et le deuxième contient un texte "standard".
    Hormis cela et leur positionnement, les deux boutons sont identiques.
    Le souci que je rencontre c'est qu'une bordure apparaît autours du texte html. Je n'ai pas ce problème avec l'autre bouton.
    J'en déduis que cela vient du html mais ce n'est peut-être pas la raison.
    Sauriez-vous comment retirer cette bordure ?

    Voici les 2 boutons :
    Nom : bapa.png
Affichages : 121
Taille : 8,3 Ko

    Le code du premier bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JButton boutTrack = new JButton("<html><center>Essai de texte<br>avec saut de ligne</center></html>");
    			boutTrack.setBounds(50, 475, 356, 200);
    			boutTrack.setBackground(mongray);
    			boutTrack.setBorder(BorderFactory.createLineBorder(mongray));
    			boutTrack.setFont(fontbout);
    			this.getContentPane().add(boutTrack);
    Le code du deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JButton boutReg = new JButton("Essai de texte");
    			boutReg.setBounds(456, 475, 356, 200);
    			boutReg.setBackground(mongray);
    			boutReg.setBorder(BorderFactory.createLineBorder(mongray));
    			boutReg.setFont(fontbout);
    			this.getContentPane().add(boutReg);
    Merci d'avance pour votre aide précieuse.

  6. #46
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Pour faire un saut de ligne vous pouvez utiliser directement dans le texte un \n. Exemple : "Première ligne.\n Deuxième ligne"

  7. #47
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Ah ?! Il me semble avoir essayé et ça ne marchait pas. J'ai du faire une erreur de frappe. Je vais re-essayer.
    Il existe une commande pour centrer le texte ?

  8. #48
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Je ne sais pas si il y a une commande pour centrer le texte. Il n'est pas centré automatiquement sur un JButton ? Sinon vous pouvez créer votre propre bouton et redéfinir la méthode paintComponent() de celui-ci pour le décorer à votre guise.

  9. #49
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Aussi étrange que cela puisse paraître : oui mais non. Mdr
    En fait la zone de texte est automatiquement centrée dans le bouton. Mais avec plusieurs lignes, le texte est aligné à gauche dans la zone de texte qui reste centrée.

  10. #50
    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
    Comme en HTML, il suffit d'utiliser la balise CENTER pour centrer le texte...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JButton("<html><center>Essai de texte<br>avec saut de ligne</center>");
    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. #51
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Comme en HTML, il suffit d'utiliser la balise CENTER pour centrer le texte...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JButton("<html><center>Essai de texte<br>avec saut de ligne</center>");
    Je crois qu'il a un problème de bordure qui s'affiche avec le code HTML avez vous une solution ?

  12. #52
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Oui exactement, si je mets le texte en html j'arrive à avoir plusieurs lignes bien centrées mais par contre j'ai une bordure qui apparaît et je ne sais pas pourquoi ni comment la supprimer.
    L'alternative serait de mettre en texte en java mais je viens de tester, "\n" ne fonctionne pas (peut-être parce qu'on est sur une initialisation de bouton) et je ne sais pas comment centrer.

  13. #53
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    J'ai trouver une solution pour votre problème de cadre html. J'ai trafiquer un peut mais chez moi sa fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JButton b = new JButton();
    b.add(new JLabel("<html><center>AAA<br>BBB</center></html>"));

  14. #54
    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 johny13400 Voir le message
    Je crois qu'il a un problème de bordure qui s'affiche avec le code HTML avez vous une solution ?
    Quel problème de bordure ? Si c'est de l'indicateur de focus dont tu parles, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    button.setFocusPainted(false);
    Encore que l'indication de focus, c'est un peu utile, mais on peut faire un changement de couleur de fond aussi. Par ailleurs, à un moment donné, si on veut vraiment complètement personnaliser l'interface, en Swing, on fait un LookAndFeel... ou alors on utilise JavaFX qui va permettre de personnaliser via CSS.
    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.

  15. #55
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Merci joel.drigo, ça fonctionne. Merci également pour vos conseils, je vais creuser de ce côté là car JavaFX je ne connais pas mais ça pourrait s'avérer très utile.

    Par contre y'a un truc que je ne comprends pas. J'ai créé une JFrame à laquelle j'ai attribué un JPanel en tant que contentpane. J'ai placé des boutons dans ma JFrame qui me permettent de créer une nouvelle fenêtre en changeant de contentpane. ça fonctionne nickel jusqu'à ce que je change de contentpane.
    En effet, je change de contentpane mais pas de JFrame donc j'ai mis le bouton du nouveau contentpane dans la JFrame et j'ai utilisé des setVisible(). Mais en fait, visible ou non, aucun bouton n'apparaît dans ma fenêtre quand je change de contentpane.
    Je ne sais pas si je suis très clair. Pour faire simple, j'ai une page d'accueil dans laquelle il y a 10 boutons. En gros ce que je voudrais faire c'est que quand on clique sur un bouton ça nous envoie sur une nouvelle fenêtre qui possèderait un bouton "retour" qui permettrait de revenir à la fenêtre précédente.

    Voici mon code (encore brouillon) :
    Classe FenetreMainD5 "la JFrame" :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    package d5;
     
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
     
    public class FenetreMainD5 extends JFrame {
    	private PanneauMainD5 panMainD5 = new PanneauMainD5();
    	private PanneauTrackD5 panTrack = new PanneauTrackD5();
    	private panHS6151 panHS6151 = new panHS6151();
    	private int choixPan = 0;
    	Font fontbout = new Font("Courrier", Font.PLAIN, 30);
    	private Image back;
     
    	public FenetreMainD5() {
    		this.setTitle("Outils D5-Isom");
    		this.setSize(1700, 1000);
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setResizable(false);
     
    		Color grine = new Color(2, 136, 18);
    		Color mongray = new Color(100, 100, 100);
     
     
    			this.setContentPane(panMainD5);
    			this.setBackground(Color.DARK_GRAY);
    			this.getContentPane().setLayout(null);
     
    			JButton boutTrack = new JButton("<html><center>Heure de<br>Changement de Bac</center></html>");
    			boutTrack.setBounds(35, 490, 295, 200);
    			boutTrack.setBackground(mongray);
    			boutTrack.setBorder(BorderFactory.createLineBorder(mongray));
    			boutTrack.setFont(fontbout);
    			boutTrack.setFocusPainted(false);
    			this.getContentPane().add(boutTrack);
     
    			JButton boutReg = new JButton("<html><center>Réglages après<br>Changement de Bac</center></html>");
    			boutReg.setBounds(363, 490, 295, 200);
    			boutReg.setBackground(mongray);
    			boutReg.setBorder(BorderFactory.createLineBorder(mongray));
    			boutReg.setFont(fontbout);
    			this.getContentPane().add(boutReg);
     
    			JButton boutHS6151 = new JButton("<html><center>HS6151<br>Principe</center></html>");
    			boutHS6151.setFocusPainted(false);
    			boutHS6151.setBounds(691, 490, 295, 200);
    			boutHS6151.setBackground(mongray);
    			boutHS6151.setBorder(BorderFactory.createLineBorder(mongray));
    			boutHS6151.setFont(fontbout);
    			//boutHS6151.setForeground(Color.BLACK);
    			this.getContentPane().add(boutHS6151);
     
    			JButton boutRet = new JButton ("Retour");//, new ImageIcon(back));
    			boutRet.setBounds(10, 10, 100, 100);
    			this.getContentPane().add(boutRet);
    			if (choixPan == 0) boutRet.setVisible(false);
    			else boutRet.setVisible(true);
     
    			JButton boutHS6251 = new JButton("<html><center>HS6251<br>Principe</center></html>");
    			boutHS6251.setFocusPainted(false);
    			boutHS6251.setBounds(1015, 490, 295, 200);
    			boutHS6251.setBackground(mongray);
    			boutHS6251.setBorder(BorderFactory.createLineBorder(mongray));
    			boutHS6251.setFont(fontbout);
    			this.getContentPane().add(boutHS6251);
     
    			JButton boutHS6351 = new JButton("<html><center>HS6351<br>Principe</center></html>");
    			boutHS6351.setFocusPainted(false);
    			boutHS6351.setBounds(1347, 490, 295, 200);
    			boutHS6351.setBackground(mongray);
    			boutHS6351.setBorder(BorderFactory.createLineBorder(mongray));
    			boutHS6351.setFont(fontbout);
    			this.getContentPane().add(boutHS6351);
     
    			JButton boutSoude = new JButton("Circuit Soude");
    			boutSoude.setBounds(691, 725, 295, 200);
    			boutSoude.setBackground(mongray);
    			boutSoude.setBorder(BorderFactory.createLineBorder(mongray));
    			boutSoude.setFont(fontbout);
    			this.getContentPane().add(boutSoude);
     
    			JButton boutRG = new JButton("Réseau Gaz D5");
    			boutRG.setBounds(35, 725, 295, 200);
    			boutRG.setBackground(mongray);
    			boutRG.setBorder(BorderFactory.createLineBorder(mongray));
    			boutRG.setFont(fontbout);
    			this.getContentPane().add(boutRG);
     
    			JButton boutSoudeNorm = new JButton("<html><center>Circuit Soude<br>Disposition Normale</center></html>");
    			boutSoudeNorm.setFocusPainted(false);
    			boutSoudeNorm.setBounds(1015, 725, 295, 200);
    			boutSoudeNorm.setBackground(mongray);
    			boutSoudeNorm.setBorder(BorderFactory.createLineBorder(mongray));
    			boutSoudeNorm.setFont(fontbout);
    			this.getContentPane().add(boutSoudeNorm);
     
    			JButton boutSoudeRenou = new JButton("<html><center>Circuit Soude<br>Renouvellement</center></html>");
    			boutSoudeRenou.setFocusPainted(false);
    			boutSoudeRenou.setBounds(1347, 725, 295, 200);
    			boutSoudeRenou.setBackground(mongray);
    			boutSoudeRenou.setBorder(BorderFactory.createLineBorder(mongray));
    			boutSoudeRenou.setFont(fontbout);
    			this.getContentPane().add(boutSoudeRenou);
     
    			JButton boutDA101 = new JButton("<html><center>DA101<br>Schéma Simplifié</center></html>");
    			boutDA101.setFocusPainted(false);
    			boutDA101.setBounds(363, 725, 295, 200);
    			boutDA101.setBackground(mongray);
    			boutDA101.setBorder(BorderFactory.createLineBorder(mongray));
    			boutDA101.setFont(fontbout);
    			this.getContentPane().add(boutDA101);
     
    			boutTrack.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent a) {
    					//choixPan = 1;
    					setContentPane(panTrack);
    					boutTrack.setVisible(false);
    					boutReg.setVisible(false);
    					boutHS6151.setVisible(false);
    					repaint();
    					revalidate();
    				}
    			});
    			boutHS6151.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent b) {
    					choixPan = 1;
    				setContentPane(panHS6151);
    				boutTrack.setVisible(false);
    				boutReg.setVisible(false);
    				boutHS6151.setVisible(false);
    				//boutRet.setVisible(true);
    				repaint();
    				revalidate();
    				}
    			});
    			boutRet.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent c) {
    					setContentPane(panMainD5);
    					boutTrack.setVisible(true);
    					boutReg.setVisible(true);
    					boutHS6151.setVisible(true);
    					boutRet.setVisible(false);
    					repaint();
    					revalidate();
    				}
    			});
     
    			this.setBackground(Color.DARK_GRAY);
    			this.getContentPane().setLayout(null);
    		}
    	}
    Classe PanneauMainD5 "le 1er contentpane" :
    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
    package d5;
     
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
     
    import javax.swing.JPanel;
     
    public class PanneauMainD5 extends JPanel {
     
     
    	public PanneauMainD5() {}
    		public void paintComponent (Graphics g) {
     
    			Font font1 = new Font("Courrier", Font.BOLD, 150);
     
    			g.setFont(font1);
    			g.setColor(Color.GRAY);
    			g.drawString("Outils D5-Isom", 40, 425);
     
    	}
    }
    Classe panHS6151 "le 2e contentpane" :
    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
    package d5;
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
    public class panHS6151 extends JPanel {
    	private Image imgHS6151;
     
    	public panHS6151() {
    	try {
    		imgHS6151 = ImageIO.read(this.getClass().getResource("/d5/hs6151.png"));
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
     
    }
    	public void paintComponent (Graphics g) {
    		//g.drawImage(imgHS6151, 0, 0, 1484, 865, this);
    		g.drawImage(imgHS6151, 150, 150, 1500, 900, this);
    	}
    }
    Merci d'avance pour vos conseils.

  16. #56
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Quand vous changez votre contentPane il ne peut pas y avoir de bouton à l'intérieur du second car vous les ajouter seulement dans le premier.
    Pour éviter ce genre de problème il vaudrait mieux les ajouter directement sur votre panMainD5 et panTrack grâce à la méthode add.

  17. #57
    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 Vahia Voir le message
    Je ne sais pas si je suis très clair.
    Pas complètement non. Avec plus de précision sur le bouton cliqué, le panneau affiché en conséquence, puis le nouveau bouton cliqué, le code correspondant. Voire un ECM sans le superflu.

    Citation Envoyé par Vahia Voir le message
    Par contre y'a un truc que je ne comprends pas. J'ai créé une JFrame à laquelle j'ai attribué un JPanel en tant que contentpane. J'ai placé des boutons dans ma JFrame qui me permettent de créer une nouvelle fenêtre en changeant de contentpane.
    Donc tu ne crées pas une nouvelle fenêtre : tu remplaces le contentpane de la première par un nouveau. Donc les boutons du premier ne sont plus ni visibles ni accessibles.

    Citation Envoyé par Vahia Voir le message
    j'ai une page d'accueil dans laquelle il y a 10 boutons.
    Le soucis c'est que tu as viré le layout manager et tout l'agencement est fait en static : du coup, ta fenêtre n'est pas adaptable. Sur mon écran je n'ai que 4 boutons, pas 10. Certains ne verront peut-être qu'un seul bouton.

    Par ailleurs, je vois que tes redéfinition de paintComponent n'appellent pas super.paintComponent. Il faut savoir que le contexte graphique en Swing est recyclé : si tu supprimes l'appel de paintComponent, tu risques de voir des reliquats de dessin d'autres composants graphiques en dessous du dessin du composants courants. A force ça va être un gros bazar.

    Maintenant pour le principe :

    • soit tu fais plusieurs JFrame et tu les caches ou les rends visibles au besoin : plus besoin de changer de content pane ou te faire des séries de setVisible(true/false). En cachant ou en affichant la fenêtre, tout le contenu est caché ou affiché d'un coup.

      Démo de principe:
      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
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      public class DemoManyFrame {
       
      	public static void main(String[] args) {
       
      		List<JFrame> frames = Stream.iterate(1, i-> i+1).limit(3)
      				                .map(i-> createFrame("Fenêtre "+i))
      				                .collect(Collectors.toList());
       
      		frames.forEach(frame-> createPanel(frame, frames));
       
      		frames.get(0).setVisible(true);
       
      	}
       
      	private static void createPanel(JFrame currentframe, List<JFrame> frames) {
      		JPanel panel = new JPanel(new GridBagLayout());
      		GridBagConstraints gbc = new GridBagConstraints();
      		gbc.gridx=0;
      		gbc.gridy=GridBagConstraints.RELATIVE;
      		gbc.insets = new Insets(5, 5, 5, 5);
      		frames.stream()
      		      .filter(frame-> frame!=currentframe)
      		      .map(frame-> createButton(frame, currentframe))
      		      .forEach(button-> panel.add(button, gbc));
       
      		currentframe.setContentPane(panel);
       
      	}
       
      	private static JButton createButton(JFrame showFrame, JFrame hideFrame) {
      		JButton button = new JButton("Afficher "+showFrame.getTitle().toLowerCase());
      		button.addActionListener(e-> {
      			showFrame.setVisible(true);
      			hideFrame.setVisible(false);
      		});
      		return button;
      	}
       
      	private static JFrame createFrame(String name) {
       
      		JFrame frame = new JFrame(name);
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		frame.setSize(400, 400);
      		frame.setLocationRelativeTo(null);
      		return frame;
       
      	}
       
      }
    • Soit tu utilises un CardLayout qui va te permettre d'empiler plusieurs panels, et d'en afficher un seul à la fois.

      Démo de principe :
      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
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      public class DemoFrameMultiPanel {
       
      	public static void main(String[] args) {
       
      		JFrame frame = createFrame("Démo");
       
      	    Object[][] configs = {
      	    		{
      	    			Color.RED,
      	    			"rouge"
      	    		},
      	    		{
      	    			Color.YELLOW,
      	    			"jaune"
      	    		},
      	    		{
      	    			Color.CYAN,
      	    			"bleu"
      	    		}
      	    };
       
      		CardLayout cardLayout = new CardLayout();
      		frame.getContentPane().setLayout(cardLayout);
       
      		for(int i=0; i<configs.length; i++) {
      			createPanel(frame, cardLayout, i, configs);
      		}
      		frame.setTitle("Panneau "+ (String)configs[0][1]);
      		frame.setVisible(true);
       
      	}
       
      	private static void createPanel(JFrame frame, CardLayout cardLayout, int i, Object[][] configs) {
       
      		Color color = (Color) configs[i][0];
      		String id = (String) configs[i][1];
       
      		JPanel panel = new JPanel(new GridBagLayout());
      		panel.setBackground(color);
      		GridBagConstraints gbc = new GridBagConstraints();
      		gbc.gridx=0;
      		gbc.gridy=GridBagConstraints.RELATIVE;
      		gbc.insets = new Insets(5, 5, 5, 5);
      		Arrays.stream(configs)
      		      .filter(config-> config!=configs[i])
      		      .map(config-> createButton(frame, cardLayout, (String) config[1]))
      		      .forEach(button-> panel.add(button, gbc));
       
      		frame.add(panel, id);
       
      	}
       
      	private static JButton createButton(JFrame frame, CardLayout cardLayout, String id) {
      		JButton button = new JButton("Afficher panneau "+id);
      		button.addActionListener(e-> {
      			cardLayout.show(frame.getContentPane(), id);
      			frame.setTitle("Panneau "+ id);
      		});
      		return button;
      	} 
       
      	private static JFrame createFrame(String name) {
       
      		JFrame frame = new JFrame(name);
      		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
      		frame.setSize(400, 400);
      		frame.setLocationRelativeTo(null);
      		return frame;
       
      	}
       
      }
    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.

  18. #58
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Merci messieurs pour votre aide.
    @JonathanTC : effectivement si je n'ajoute pas mon bouton au nouveau JPanel ça ne peut pas fonctionner... Erreur bête.

    @joel.drigo : tu augmentes la difficulté (je suis un débutant) et c'est très intéressant. Je vais creuser ça...

  19. #59
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Une autre petite question, ou plutôt deux :

    - Quand je clique sur mon bouton "retour", je passe du JPanel B au JPanel A. Quelle instruction dois-je utiliser pour tuer mon JPanel B ? Le but étant que quand je vais ensuite cliquer sur le bouton qui m'amènera de nouveau au JPanel B, je souhaite que tous ses composants soient réinitialisés.

    - Quand je suis sur un JPanel qui contient un JLabel et un JButton, mon JButton modifie mon JLabel. Lorsque je clique plusieurs fois sur mon JButton, les différentes version du JLabel se superposent alors que je ne voudrais que la dernière version. Quelle instruction faudrait-il utiliser pour cela ?

    Dans les deux cas j'utilise revalidate() et repaint() mais apparemment ça ne suffit pas...
    J'ai aussi essayé removeAll() mais ça m'inhibe mon bouton retour sur le JPanel B.

  20. #60
    Membre régulier Avatar de JonathanTC
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2015
    Messages : 90
    Points : 112
    Points
    112
    Par défaut
    Quand je clique sur mon bouton "retour", je passe du JPanel B au JPanel A. Quelle instruction dois-je utiliser pour tuer mon JPanel B ? Le but étant que quand je vais ensuite cliquer sur le bouton qui m'amènera de nouveau au JPanel B, je souhaite que tous ses composants soient réinitialisés.
    le meilleur moyen c'est de créer une nouvelle instance de votre classe B dans laquelle vous ajouterez le bouton de retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		boutHS6151.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent b) {
    				choixPan = 1;
     
    				panHS6151 = new PanHS6151();
    				panHS6151.add(boutRet);
    				setContentPane(panHS6151);
     
    				revalidate();
    			}
    		});
    Quand je suis sur un JPanel qui contient un JLabel et un JButton, mon JButton modifie mon JLabel. Lorsque je clique plusieurs fois sur mon JButton, les différentes version du JLabel se superposent alors que je ne voudrais que la dernière version. Quelle instruction faudrait-il utiliser pour cela ?
    il vous faut rafraichir l'affichage. Pour cela il faut remplir votre JPanel de la couleur de fond avant toute les opérations du paintComponent().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    g.setColor(Color.???); // ici la couleur de fond
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
     
    // suite de vos opéations
    Dans les deux cas j'utilise revalidate() et repaint() mais apparemment ça ne suffit pas...
    Normalement le revalidate devrait suffire.

    J'ai aussi essayé removeAll() mais ça m'inhibe mon bouton retour sur le JPanel B.
    Le removeAll permet de supprimer vos components de votre JPanel

Discussions similaires

  1. [hibernate][spring] première application
    Par iftolotfi dans le forum Hibernate
    Réponses: 2
    Dernier message: 01/06/2006, 07h03
  2. [Debutant(e)] Lancement de ma première application J2EE
    Par thomas_le_debutant dans le forum Java EE
    Réponses: 14
    Dernier message: 15/03/2006, 09h12
  3. [ActionPerformed] Fermer toute l'application
    Par Invité dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 14/03/2006, 11h53
  4. Récupérer les composants visuels de toute l'application
    Par sessime dans le forum Composants VCL
    Réponses: 4
    Dernier message: 27/02/2006, 09h18
  5. [DEBUTANT]Première application avec XML
    Par mlallem dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/11/2005, 15h07

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