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

Interfaces Graphiques en Java Discussion :

[Débutant] Interfaces GUI sophistiquées


Sujet :

Interfaces Graphiques en Java

  1. #21
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Essaye de remplacer ta Box par un GridBagLayout.
    Oui, je vais essayer ça... Ca demandera un peu de travail supplémentaire, mais c'est vrai que ce sera mieux...

    Pourquoi le VerticalBox ne réagit pas à setPreferredSize ?
    Parce qu'il est presque deprecated ???

  2. #22
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    aaah !! Ca y est, j'y suis arrivé !!

    En fait, c'est une petite phrase dans le livre de Delannoy qui m'a mis la puce à l'oreille : "... le gestionnaire BoxLayout est le seul à utiliser la taille maximale..."

    Avec setMaximumSize( new Dimension(205, 40) );

    ça marche très bien...

    Je me permets de remettre le code un tant soit peu plus élaboré, pour que cela serve aux autres débutants qui tomberont sur ce fil lors d'une recherche :

    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
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
     
    class MaFenetre extends JFrame
    {
    public JPanel pan1, pan2, pan3, pan4;
     
    public JButton pan1_but1, pan1_but2, pan1_but3, pan1_but4;
     
    public JTable jtable;
     
    public JLabel pan3_lab1, pan3_lab2, pan3_lab3, pan3_lab4, pan3_lab5, pan3_lab6, pan3_lab7;
     
    public JLabel pan3_bidon1, pan3_bidon2, pan3_bidon3;
    public JLabel pan3_bidon4, pan3_bidon5;
     
    public JTextField pan3_txt1, pan3_txt2, pan3_txt3, pan3_txt4;
    public JTextField pan3_txt5, pan3_txt6, pan3_txt7;
     
    public JCheckBox pan3_ch1, pan3_ch2;
     
    public JButton pan4_but1, pan4_but2, pan4_but3, pan4_but4;
     
    public MaFenetre()
    {
    // Mise en place des 4 premiers grands PANELS : etape A)
    setTitle("Exemple n°2");
    setSize(1000,700);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    Container contenu = getContentPane();
    GridBagLayout gA = new GridBagLayout();
    contenu.setLayout(gA);
    GridBagConstraints c = new GridBagConstraints();   c.fill = c.BOTH ;
     
    pan1=new JPanel(); //pan1.setBackground(Color.blue);
              pan1.setBorder(new TitledBorder("Contrôles"));
              // Dimension dim = new Dimension(120,700); pan1.setMaximumSize(dim);
    pan2=new JPanel(); //pan2.setBackground(Color.yellow);
              pan2.setBorder(new TitledBorder("Tableau des données"));
    pan3=new JPanel(); //pan3.setBackground(Color.green);
              pan3.setBorder(new TitledBorder("Données de l'externe"));
    pan4=new JPanel(); //pan4.setBackground(Color.red);
              // pan4.setBorder(new TitledBorder("Navigation"));
     
    // position des  quatre panels
    int A_x[]   = {  0, 1, 1, 1};
    int A_y[]   = {  0, 0, 1, 2};
    int A_larg[]= {  1, 1, 1, 1};
    int A_haut[]= {  3, 1, 1, 1};
    int A_px[]  = { 12,88, 0, 0};
    int A_py[]  = {100,46, 0, 0}; // bizarre:{0,46,0,0} a un comportement meilleur que {0,46,46,8} = total 100 %
     
      for (int i=0; i < A_x.length; i++)
          {
          c.gridx = A_x[i]; c.gridy = A_y[i];
          c.gridwidth = A_larg[i]; c.gridheight = A_haut[i];
          c.weightx = A_px[i]; c.weighty = A_py[i];
          if (i==0) contenu.add( pan1, c );
          if (i==1) contenu.add( pan2, c );
          if (i==2) contenu.add( pan3, c );
          if (i==3) contenu.add( pan4, c );
          }
      // étape B) élaboration du pan1
      Box gB = Box.createVerticalBox();
      pan1.add(gB);
      pan1_but1 = new JButton("Liste des clients");
      gB.add(pan1_but1); pan1_but1.setMaximumSize(new Dimension(205,40));
            gB.add(Box.createVerticalStrut(20));
      pan1_but2 = new JButton("Liste des fournisseurs");
      gB.add(pan1_but2); pan1_but2.setMaximumSize(new Dimension(205,40));
            gB.add(Box.createVerticalStrut(20));
            // gB.add(Box.createGlue()); // marche pas ??
      pan1_but3 = new JButton("Nouvel externe");
      gB.add(pan1_but3); pan1_but3.setMaximumSize(new Dimension(205,40));
            gB.add(Box.createVerticalStrut(20));
      pan1_but4 = new JButton("Modifier externe");
      gB.add(pan1_but4); pan1_but4.setMaximumSize(new Dimension(205,40));
     
     
    // étape C) élaboration du pan2
      pan2.setLayout(new BorderLayout());
      jtable=new JTable(60,6);
      JScrollPane defil=new JScrollPane(jtable);
      pan2.add(defil,BorderLayout.CENTER);
     
    // étape D) élaboration du pan3:
     
    //              JLabel-------------    JTextField---------   Ch--   JLabBidon----
    int B_x[]   = { 1, 4, 7, 1, 1, 5, 6,   2, 6, 8, 2, 2, 7, 7,  1, 3,  0, 4, 3, 5, 9};
    int B_y[]   = { 1, 1, 1, 3, 5, 5, 7,   1, 1, 1, 3, 5, 5, 7,  7, 7,  0, 2, 4, 6, 8};
    int B_larg[]= { 1, 2, 1, 1, 1, 2, 1,   2, 1, 1, 7, 3, 2, 2,  2, 3,  1, 1, 1, 1, 1};
    int B_haut[]= { 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1,  1, 1,  1, 1, 1, 1, 1};
    int B_px[]  = {11,22,11,11,11,22,11,  22,11,11,77,33,22,22, 22,33,  6,11,11,11, 6};
    int B_py[]  = {11,11,11,11,11,11,11,  11,11,11,11,11,11,11, 11,11, 11,11,11,11,12};
     
    GridBagLayout gD = new GridBagLayout(); pan3.setLayout(gD); c.fill = c.BOTH ;
     
    pan3_lab1 = new JLabel("Nom")  ; pan3_lab2 = new JLabel("Prénom");
    pan3_lab3 = new JLabel("Age")  ; pan3_lab4 = new JLabel("Adresse");
    pan3_lab5 = new JLabel("Ville"); pan3_lab6 = new JLabel("Code Postal");
    pan3_lab7 = new JLabel("Tél");
     
    for (int i=0; i <= 6; i++)
          {
          c.gridx = B_x[i]; c.gridy = B_y[i];
          c.gridwidth = B_larg[i]; c.gridheight = B_haut[i];
          c.weightx = B_px[i]; c.weighty = B_py[i];
          if (i==0) pan3.add( pan3_lab1, c );
          if (i==1) pan3.add( pan3_lab2, c );
          if (i==2) pan3.add( pan3_lab3, c );
          if (i==3) pan3.add( pan3_lab4, c );
          if (i==4) pan3.add( pan3_lab5, c );
          if (i==5) pan3.add( pan3_lab6, c );
          if (i==6) pan3.add( pan3_lab7, c );
          }
     
    pan3_txt1=new JTextField("vide 1"); pan3_txt2=new JTextField("vide 2");
    pan3_txt3=new JTextField("vide 3"); pan3_txt4=new JTextField("vide 4");
    pan3_txt5=new JTextField("vide 5"); pan3_txt6=new JTextField("vide 6");
    pan3_txt7=new JTextField("vide 7");
     
    for (int i=7; i <=13; i++)
          {
          c.gridx = B_x[i]; c.gridy = B_y[i];
          c.gridwidth = B_larg[i]; c.gridheight = B_haut[i];
          c.weightx = B_px[i]; c.weighty = B_py[i];
          if (i== 7) pan3.add( pan3_txt1, c );
          if (i== 8) pan3.add( pan3_txt2, c );
          if (i== 9) pan3.add( pan3_txt3, c );
          if (i==10) pan3.add( pan3_txt4, c );
          if (i==11) pan3.add( pan3_txt5, c );
          if (i==12) pan3.add( pan3_txt6, c );
          if (i==13) pan3.add( pan3_txt7, c );
          }
     
    pan3_ch1=new JCheckBox("Client"); pan3_ch2=new JCheckBox("Fournisseur");
     
    for (int i=14; i <=15; i++)
          {
          c.gridx = B_x[i]; c.gridy = B_y[i];
          c.gridwidth = B_larg[i]; c.gridheight = B_haut[i];
          c.weightx = B_px[i]; c.weighty = B_py[i];
          if (i==14) pan3.add( pan3_ch1, c );
          if (i==15) pan3.add( pan3_ch2, c );
          }
     
    pan3_bidon1 = new JLabel(" "); pan3_bidon2 = new JLabel(" ");
    pan3_bidon3 = new JLabel(" "); pan3_bidon4 = new JLabel(" ");
    pan3_bidon5 = new JLabel(" ");
     
    for (int i=16; i <=20; i++)
          {
          c.gridx = B_x[i]; c.gridy = B_y[i];
          c.gridwidth = B_larg[i]; c.gridheight = B_haut[i];
          c.weightx = B_px[i]; c.weighty = B_py[i];
          if (i==16) pan3.add( pan3_bidon1, c );
          if (i==17) pan3.add( pan3_bidon2, c );
          if (i==18) pan3.add( pan3_bidon3, c );
          if (i==19) pan3.add( pan3_bidon4, c );
          if (i==20) pan3.add( pan3_bidon5, c );
          }
     
    // étape E) élaboration du pan4:
    FlowLayout pan4_fl = new FlowLayout(FlowLayout.CENTER);
    pan4_fl.setHgap(50);
    pan4.setLayout(pan4_fl);
     
    pan4_but1=new JButton("Précédent"); pan4_but2=new JButton("Suivant");
    pan4_but3=new JButton("Valider");   pan4_but4=new JButton("Annuler");
    pan4.add(pan4_but1); pan4.add(pan4_but2);
    pan4.add(pan4_but3); pan4.add(pan4_but4);
    }
     
    }
     
    public class GUI_complique_02
    {
    public static void main (String args[])
       {
       MaFenetre fen = new MaFenetre();
       fen.setVisible(true);
       }
    }
    ;-)

  3. #23
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par Gfx
    Mais bon ça vient forcément de la manière dont tu utilises GridBagLayout. Je te déconseille de commencer la création de GUI avec lui car il est difficile à maîtriser.
    La je réponds non : il suffit qu'il se construise une fonction permettant d'initialiser tous les constraints de son composant et qui l'ajoutera à son component. Ainsi, il n'aura qu'à appeler sa fonction avec, en paramètres :
    • - les valeurs à appliquer aux divers constraints
      - le composant à placer
      - son component


    Quant au design des boutons il probient de la JRE et non pas de la JDK : j'en veux pour preuve que je n'utilise aucunement ce fameux tigre qui se veut être très facile et j'ai pourtant des boutons similaires sur mes applis.

    La difficulté n'est difficile que lorsqu'on la juge insurmontable...
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  4. #24
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Je peux comprendre que certaines personnes trouvent diffcile le GridBagLayout... En tous cas, au début de l'apprentissage...

    Mais après, c'est vrai : quand on a "dessiné" correctement son interface, et qu'on met les bonnes positions et dimensions des composants sur les cellules du Grid, ça va tout seul !!

    ;-) ;-) ;-)

    AU FAIT: le dimensionnement égal horizontal des 4 boutons fonctionnent bien , mais il ne prends pas mon hauteur maximale de 40 ? Pourquoi ?

    J'ai fait un test en mettant tout à 80 au lieu de 40 à ces 4 boutons, et la hauteur de ces 4 boutons n'a pas doublée, hélas...

    EDIT : hé ben j'ai trouvé... Pour la hauteur, le VerticalBox va regarder du côté de setPreferredSize...

    Je dois donc utiliser setMaximumSize et setPreferredSize conjointement pour arriver à mes fins de mise en forme, dans le VerticalBoxLayout...
    Càd que j'appelle ces 2 fonctions l'une après l'autre, sur chacuns des 4 boutons...

    C'est fou ça...

  5. #25
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Je suis ravi de voir que vous aimez le GridBagLayout mais après 7 ans passés à programmer en Java et à discuter avec des centaines de développeurs il y a une chose dont je suis sûr, le GridBagLayout n'est pas simple. Il n'est pas insurmontable mais je me base sur l'expérience de beaucoup, beaucoup de gens... Son problème majeur reste, malgré l'utilisation de méthodes de construction (j'utilise cette technique aussi), qu'il est difficile de maintenir une UI développée avec le GridBagLayout lorsqu'on doit revenir sur le code quelques semaines ou mois plus tard.

    Quant au design des boutons il probient de la JRE et non pas de la JDK : j'en veux pour preuve que je n'utilise aucunement ce fameux tigre qui se veut être très facile et j'ai pourtant des boutons similaires sur mes applis.
    Scoop : le JDK comprend un JRE. Second scoop : ils utilisent les mêmes classes ! Si tu n'as pas installé le J2SE SDK 1.5 mais que tu vois les boutons ainsi cela signifie que ton JRE a été mis à jour par une application ou par le soft de mise à jour de Sun. Ce design EST celui de Tiger, quoi que tu en dises.
    Romain Guy
    Android - Mon livre - Mon blog

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Débutant]Interface graphique avec eclipse
    Par steelidol dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 08/06/2006, 13h12
  2. Réponses: 2
    Dernier message: 08/01/2006, 15h09
  3. [PIC18F4550][Débutant] Interfacer C et Assembleur
    Par Squall1986 dans le forum MPLAB
    Réponses: 2
    Dernier message: 28/12/2005, 09h44
  4. [Débutant] Interface Graphique
    Par Ben.fr dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 23/06/2005, 18h27
  5. [débutant]Interface graphique Récalcitrante
    Par chleuh dans le forum Débuter
    Réponses: 2
    Dernier message: 12/12/2004, 10h21

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