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

Composants Java Discussion :

Composant personnalisé avec textes


Sujet :

Composants Java

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut Composant personnalisé avec textes
    Tout d'abord désolé si ma question vous parait simplissime ou pire si le sujet est déjà traité. J'ai cherché mais pas trouvé.
    Je voudrai créer un composant personnalisé comportant deux textes l'un en dessous de l'autre. J'ai pensé à une classe héritant de JPanel avec deux JTextArea.
    Je voudrai que sa taille soit limitée aux deux JTextArea. J'ai donc tenté cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setSize(Math.max(texte1.getWidth (),texte2.getWidth ()),texte1.getHeight ()+texte2.getHeight ());
    Mais cela ne marche pas, mon composant occupe toute la place de la fenêtre qui le contient.
    Je voudrai de plus que les deux textes soient bien l'un en dessous de l'autre mais si j'utilise un BoxLayout vertical, les deux textes occupent toute la largeur du panneau et se partagent la hauteur.
    J'ai bien conscience que c'est un problème de placement mais je n'y arrive pas.
    Merci.
    C'est en respectant les autres que l'on se fait respecter.

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut
    J'ai réussi avec un layout personnalisé. J'ai finalement utilisé des JLabels qui conviennent mieux à ce que je veux faire.

    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
    package essais_Patrice;
     
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.LayoutManager;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class DandD
    {
     
        public static void main (String[] args)
        {
        JFrame frame = new JFrame( "Test DnD" );
     
        frame.getContentPane().add( new PaysRoi("<html><div align='center'><i>Empire<br>Byzantin</i></div></html>","<html><div align='center'>Michel II<br>820 à 829</div></html>") );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.getContentPane ().setBackground (Color.CYAN);
     
        frame.setSize( 600, 600 );
     
        frame.setVisible( true );
        }
    }    
     
    class PaysRoi extends JPanel implements MouseMotionListener
    {
     
     
     
     
            public PaysRoi(String pays,String roi)
           {
               setOpaque(false);
     
               JLabel Lpays=new JLabel(pays);
               Lpays.setAlignmentX(CENTER_ALIGNMENT);
               Lpays.setOpaque (false);
     
     
               JLabel Lroi= new JLabel(roi);
               Lroi.setAlignmentX (CENTER_ALIGNMENT);
               Lroi.setBorder (BorderFactory.createBevelBorder (1, Color.gray, Color.BLACK));
               Lroi.setOpaque (false);
     
               add (Lpays);          
               add (Lroi);
     
               setLayout(new LayoutManager()
               {
     
                public void addLayoutComponent (String name, Component comp)
                {}
     
                public void layoutContainer (Container parent)
                {
                            Component[] composants=parent.getComponents ();
                            int w0=composants[0].getPreferredSize ().width;
                            int w1=composants[1].getPreferredSize ().width;
                            int w=Math.max(w0,w1);
                            int h0=composants[0].getPreferredSize ().height;
                            int h1=composants[1].getPreferredSize ().height;
                            int h=h0+h1;
     
                            composants[0].setBounds ((w-w0)/2, 0, w0, h0);
                            composants[1].setBounds ((w-w1)/2,h0,w1,h1);
                            parent.setBounds (0,0,w,h);
                }
     
                public Dimension minimumLayoutSize (Container parent)
                {
                    return null ;
                }
     
                public Dimension preferredLayoutSize (Container parent)
                {
                    return null ;
                }
     
                public void removeLayoutComponent (Component comp)
                {}
     
               });
     
               addMouseMotionListener( this );
     
           }
     
        public void mouseDragged (MouseEvent e)
        {
            this.setLocation (this.getLocation ().x+e.getX ()-this.getSize ().width/2,this.getLocation ().y + e.getY ()-this.getSize ().height/2);
     
        }
     
        public void mouseMoved (MouseEvent e)
        {}
    }
    C'est en respectant les autres que l'on se fait respecter.

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

Discussions similaires

  1. [XL-2010] Tableau personnalisé avec textes comme valeurs
    Par san1981 dans le forum Excel
    Réponses: 0
    Dernier message: 13/01/2015, 15h43
  2. [WD-2007] Style de trait personnalisé avec texte
    Par KHEOPS1982 dans le forum Word
    Réponses: 5
    Dernier message: 15/12/2012, 13h24
  3. [Composant] JLabel avec coupe dans le texte rendu
    Par ellene dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/02/2008, 17h23
  4. Composant TEdit avec texte affiché si vide
    Par g.ribeiro dans le forum Composants VCL
    Réponses: 5
    Dernier message: 05/09/2007, 20h19

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