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 :

[JButton] Texte et balise HTML


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 42
    Par défaut [JButton] Texte et balise HTML
    Bonjour,
    Pour la nième-fois je recommence une application qui me tient à coeur et que je n'avais pas terminée il y a quelques mois.
    Étant paumé, je reprends tout de zéro, essaie d'être moins fouillis, et de mieux faire.
    Pour faciliter la lecture de mon programme, j'ai créé une classe qui va construire un panel qui sera à droite d'un splitpane au démarrage.
    J'ai testé la mise en page avec les sous-panels, et les boutons numérotés de 1 à 8: aucun problème. Le splitpane s'affiche avec à droite un panel construit correctement.
    Ensuite j'ai décidé d'écrire l'intitulé définitif des boutons avec des balises html comme j'avais fait il y a quelques mois: aucun affichage.
    J'ai caché une grosse partie du code et me suis rendu compte que c'est la déclaration de mes boutons qui contiennent des balises html qui posent souci.
    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
     
    public class PANEL_Droit extends JPanel{
     
            JPanel PAN1 = new JPanel();
            JPanel PAN2 = new JPanel();
            JPanel PAN10 = new JPanel();
            JPanel PAN11 = new JPanel();
            JButton BUTTON_1 = new JButton("Modifier");
            JButton BUTTON_2 = new JButton("<html><center>Créer</center></br><center>un sujet</center></html>");
            JButton BUTTON_3 = new JButton("<html><center>Enregistrer</center></br><center>des résultats</center></html>");
            JButton BUTTON_4 = new JButton("<html><center>Afficher</center></br><center>des résultats</center></html>");
            JButton BUTTON_5 = new JButton("Imprimer");
            JButton BUTTON_6 = new JButton("Options");
            JButton BUTTON_7 = new JButton("Menu");
            JButton BUTTON_8 = new JButton("Quitter");
     
        public PANEL_Droit() {
     
            JPanel PAN1 = new JPanel();
            JPanel PAN2 = new JPanel();
            PAN1.setBackground(Color.yellow);
            PAN2.setBackground(Color.green);
            this.setLayout(new BorderLayout());
    //        PAN1.setLayout(new GridLayout(2, 1));
    //        PAN2.setLayout(new BorderLayout());
    //        PAN10.setLayout(new GridLayout(1, 5));
    //        PAN11.setLayout(new BorderLayout());
    //                
    //        PAN10.add(BUTTON_1);
    //        PAN10.add(BUTTON_2);
    //        PAN10.add(BUTTON_3);
    //        PAN10.add(BUTTON_4);
    //        PAN10.add(BUTTON_5);
    //        PAN11.add(BUTTON_6,BorderLayout.WEST);
    //        PAN11.add(BUTTON_7,BorderLayout.CENTER);
    //        PAN11.add(BUTTON_8,BorderLayout.EAST);
    //        PAN1.add(PAN10);
    //        PAN1.add(PAN11);
            this.add(PAN2,BorderLayout.CENTER);
            this.add(PAN1,BorderLayout.SOUTH);
     
     
        }
     
    }
    Dans mon ancien programme je n'avais pas rencontré de problèmes: j'ai seulement recopié les textes.
    Quel peut être mon erreur?
    Merci.

  2. #2
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    En l'état, je ne vois aucun problème dans ce que tu nous montres (les boutons s'affichent, le texte des boutons est visible) :

    Nom : Fenetre.PNG
Affichages : 187
Taille : 7,7 Ko

    problème est donc ailleurs. En plus du code de construction du JSplitPane, tu peux nous mettre le visuel que tu obtiens ?
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 42
    Par défaut
    Merci tout d'abord pour ta réponse.
    Bon en modifiant un truc ca fonctionne mais comme je ne comprends pas je vais mettre avant et après.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package revisions;
     
    import javax.swing.JFrame;
     
    public class Revisions {
     
      public static void main(String[] args) {
            JFrame fenetre = new fenetredemarrage();
     
        }
    }
    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
     
    package revisions;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;
     
    public class fenetredemarrage extends JFrame{
        private JSplitPane SPLITPANE_demarrage;
        public fenetredemarrage()
        {
            setTitle("Démarrage");
            setSize(1100, 700);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setResizable(false);
            JPanel PAN_Gauche = new JPanel();
            JPanel PAN_Droite = new JPanel();
            PANEL_Droit Pan2 = new PANEL_Droit();
            PAN_Gauche.setBackground(Color.red);
            PAN_Droite.setBackground(Color.blue);
            SPLITPANE_demarrage = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,PAN_Gauche,Pan2);
            SPLITPANE_demarrage.setDividerLocation(230);
            SPLITPANE_demarrage.setOneTouchExpandable(false);
            this.getContentPane().add(SPLITPANE_demarrage, BorderLayout.CENTER);
         }
    }
    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
     
    package revisions;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridBagLayout;
    import java.awt.GridLayout;
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
    public class PANEL_Droit extends JPanel{
     
            JPanel PAN1 = new JPanel();
            JPanel PAN2 = new JPanel();
            JPanel PAN10 = new JPanel();
            JPanel PAN11 = new JPanel();
            JButton BUTTON_1 = new JButton("Modifier");
            JButton BUTTON_2 = new JButton("<html><center>Créer</center></br><center>un sujet</center></html>");
            JButton BUTTON_3 = new JButton("<html><center>Enregistrer</center></br><center>des résultats</center></html>");
            JButton BUTTON_4 = new JButton("<html><center>Afficher</center></br><center>des résultats</center></html>");
            JButton BUTTON_5 = new JButton("Imprimer");
            JButton BUTTON_6 = new JButton("Options");
            JButton BUTTON_7 = new JButton("Menu");
            JButton BUTTON_8 = new JButton("Quitter");
     
        public PANEL_Droit() {
     
            JPanel PAN1 = new JPanel();
            JPanel PAN2 = new JPanel();
            PAN1.setBackground(Color.yellow);
            PAN2.setBackground(Color.green);
            this.setLayout(new BorderLayout());
            PAN1.setLayout(new GridLayout(2, 1));
            PAN2.setLayout(new BorderLayout());
            PAN10.setLayout(new GridLayout(1, 5));
            PAN11.setLayout(new BorderLayout());
     
            PAN2.setBackground(Color.red);
            PAN10.setBackground(Color.yellow);
            PAN11.setBackground(Color.pink);
     
            PAN10.add(BUTTON_1);
            PAN10.add(BUTTON_2);
            PAN10.add(BUTTON_3);
            PAN10.add(BUTTON_4);
            PAN10.add(BUTTON_5);
            PAN11.add(BUTTON_6,BorderLayout.WEST);
            PAN11.add(BUTTON_7,BorderLayout.CENTER);
            PAN11.add(BUTTON_8,BorderLayout.EAST);
            PAN1.add(PAN10);
            PAN1.add(PAN11);
            this.add(PAN2,BorderLayout.CENTER);
            this.add(PAN1,BorderLayout.SOUTH);
     
     
        }
     
    }
    Dans ce cas cela ne fonctionne pas SAUF si à la place des balises html je mets du texte classique. C'est pour cela que je pensais que le souci provenait des balises.
    Ensuite j'ai modifié la partie principale (on l'appelle comment?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Revisions {
     
      public static void main(String[] args) {
            JFrame fenetre = new fenetredemarrage();
            fenetre.setVisible(true);
     
        }
    }
    Et là cela fonctionne avec les balises!
    Je suis content que cela fonctionne mais je le serais encore plus si je comprenais mon erreur, et pourquoi dans le premier cas cela fonctionnait sans balises html.

    PS: j'ai oublié pour le visuel. C'était une fenêtre blanche. Titre de la fenêtre ok mais rien dedans.

  4. #4
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Le problème est classique : tu rends visible la fenêtre avant d'y ajouter les composants. Normalement, on prépare l'interface complètement, puis on la rend visible. Si on doit faire une interface dynamique, qui change après qu'elle soit affichée, on peut le faire (ajouter ou supprimer des composants), mais il faut avertir SWING :

    • par un revalidate() sur le composant dans lequel on a changé quelque chose, en particulier pour relancer le layout ;
    • un repaint() sur ce même composant parce qu'il peut être nécessaire de redessiner explicitement certaines parties en conséquence des changements.
    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. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 42
    Par défaut
    Merci encore pour ta réponse.
    J'ai cependant une question qui me taraude: pourquoi cela fonctionnait si je numérotais simplement les boutons 1, 2,...,8.?
    Et tant que j'y suis:il y a un léger espace entre le bord du conteneur et la rangée de boutons supérieures, mais pas inférieure. On le voit légèrement sur ta capture d'écran, et c'est plus visible chez moi.
    C'est dû à quoi?
    Merci en tout cas de m'avoir consacré un peu de temps.
    Je m'oblige à passer du temps avant de poster des questions surtout que j'ai déjà fait pas mal de boulot. Mais j'ai tellement de choses que je ne maitrise pas que c'est le fouillis des fois

  6. #6
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kerlouan Voir le message
    J'ai cependant une question qui me taraude: pourquoi cela fonctionnait si je numérotais simplement les boutons 1, 2,...,8.?
    C'était vraiment la seule différence ? Il y a des appels implicites sur certaines actions qui vont revalider et redessiner (comme par exemple, changer la taille de la fenêtre) : donc, peut-être que tu étais dans ce cas. Autre possibilité : le dimensionnement initial des boutons qui n'est pas traité de la même manière pour un rendu html : il faudrait décortiquer le source pour savoir. Quoiqu'il en soit, ne jamais tenir compte des comportements implicites non documentés : ils s'agit d'effets de bord, qui peuvent changer selon l'environnement, la version de Java, ou l'age du capitaine.

    Citation Envoyé par kerlouan Voir le message
    Et tant que j'y suis:il y a un léger espace entre le bord du conteneur et la rangée de boutons supérieures, mais pas inférieure. On le voit légèrement sur ta capture d'écran, et c'est plus visible chez moi.
    C'est dû à quoi?
    Le GridLayout répartit les composants dans la largeur et la hauteur de façon à ce qu'ils aient tous la même taille. Du coup, si tu as 88 pixels en largeur, et cinq composants (et un hgap de 0) : ça fait 17 pixels de large pour chaque composant (17*5=85), plus 3 pixels qui sont répartis à gauche et à droite (par une simple division entière par 2) : donc à priori ici 1 à gauche et 2 à droite (en LTR).

    Ce qu'illustre la ligne de code de GridLayout qui initialise le x (en LTR) : x = insets.left + extraWidthAvailable. L'inset.left, c'est normal, sinon on dessinerait sur l'éventuel border. Et int extraWidthAvailable = (widthWOInsets - (widthOnComponent * ncols + totalGapsWidth)) / 2;.
    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.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 42
    Par défaut
    Merci beaucoup pour ces réponses détaillées!
    Je mets ce problème en résolu....en attendant les prochains.
    Merci encore.

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

Discussions similaires

  1. [RegEx] Extraire un texte entres balises html ?
    Par booraq dans le forum Langage
    Réponses: 2
    Dernier message: 01/07/2007, 15h56
  2. Comment faire une balise <html:text> avec valeur dynamique
    Par chriscoolletoubibe dans le forum Struts 1
    Réponses: 13
    Dernier message: 14/05/2007, 22h13
  3. Insertion de balises html dans zone de texte
    Par Mcfly123 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 02/05/2007, 10h42
  4. HTML vers TEXTE sans balises
    Par belocom dans le forum VB.NET
    Réponses: 9
    Dernier message: 04/02/2007, 19h16
  5. Réponses: 1
    Dernier message: 06/06/2006, 09h47

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