2009-08-04 15 views
5

J'ai trois JLabels et trois JTextAreas. Je les ai dans borderlayout, au centre, mais je veux que chacun d'entre eux dans une ligne différente, ce n'est pas le cas et les dix premiers résultats de recherche dans Google pour les sauts de ligne java ne résolvent pas le problème. Comment puis-je faire un simple saut de ligne?<br>? n? un saut de ligne en Java

+0

pouvez vous montrer comment vous ajoutez vos composants à vos JPanel? – akf

+0

mainPanel.add (aLabel); mainPanel.add (unScroller); mainPanel.add (bLabel); mainPanel.add (bScroller); mainPanel.add (cLabel); mainPanel.add (cScroller); –

+0

Cela a fonctionné comme ceci: mainPanel.setLayout (new BoxLayout (mainPanel, BoxLayout.PAGE_AXIS)); –

Répondre

7

S'il s'agit d'une application Swing, vous devez utiliser un layout manager pour positionner vos champs dans le conteneur.

2

Le saut de ligne n'aidera pas à placer des objets Swing; vous devez placer une mise en page sur un centre JPanel. C'est-à-dire que le centre de votre mise en page de bordure doit être un seul objet Swing, un JPanel, et vous devez le définir sur un style qui vous permet d'empiler chaque widget. GridLayout (6,1) peut le faire.

1

Essayez d'utiliser un GridLayout pour commencer:

panel.setLayout(new GridLayout(0,2)); 
// the order of added components is important 
panel.add(labelA); 
panel.add(textAreaA); 
panel.add(labelB); 
panel.add(textAreaB); 
... 

ne semble pas trop jolie, mais il vous permet de démarrer.

Si vous ne définissez pas LayoutManager sur un nouveau panneau, il utilisera un FlowLayout qui se comporte un peu comme la disposition HTML. Mais il n'existe pas de saut de ligne dans un FlowLayout. Il va juste mettre composant après composant jusqu'à ce qu'il atteigne la fin de l'espace disponible et ensuite commencer une nouvelle ligne.
Si vous souhaitez contrôler vos mises en page, n'utilisez pas FlowLayout.

gestionnaires de mise en page que vous voudrez peut-être apprendre à connaître sont:

  • BorderLayout - très bon si vous voulez contenu redimensionnable
  • GridLayout - simple, égale grille de largeur et la hauteur
  • null - vous permet d'utiliser setBounds sur chaque composant pour obtenir des positions absolues

Il y a plus, mais ces trois devraient vous permettre de mettre en page 95% de vos panneaux.

2

Vous pouvez utiliser des gestionnaires de disposition tels que GridLayout ou GridBagLayout. Même si ce dernier n'est recommandé que pour le code généré par les générateurs d'interface graphique, je le préfère car il me donne le plus de flexibilité.

JPanel panel = new JPanel(); 
GridBagLayout layout = new GridBagLayout(); 
panel.setLayout(layout); 
layout.add(label1, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area1, new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(label2, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area2, new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(label3, new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area3, new GridBagConstraints(1, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
panel.add(label1); 
panel.add(label2); 
panel.add(label3); 
panel.add(area1); 
panel.add(area2); 
panel.add(area3); 

Bien sûr, cela semble butt-laid mais devrait vous aider à démarrer.

Vous pouvez aussi abuser d'un BorderLayout:

JPanel panel = new JPanel(new BorderLayout()); 
JPanel topRow = new JPanel(); 
panel.add(topRow, BorderLayout.PAGE_START); 
topRow.add(label1); 
topRow.add(area1); 
JPanel middleRowBox = new JPanel(new BorderLayout()); 
panel.add(middleRowBox, BorderLayout.CENTER); 
JPanel middleRow = new JPanel(); 
middleRowBox.add(middleRow, BorderLayout.PAGE_START); 
middleRow.add(label2); 
middleRow.add(area2); 
JPanel bottomRowBox = new JPanel(); 
middleRowBox.add(bottomRowBox, BorderLayout.CENTER); 
JPanel bottomRow = new JPanel(); 
bottomRowBox.add(bottomRow, BorderLayout.PAGE_START); 
bottomRow.add(label3); 
bottomRow.add(area3); 
bottomRowBix.add(new JPanel(), BorderLayout.CENTER); 
+1

Après avoir construit BEAUCOUP de composants d'interface utilisateur, je n'utilise plus que GridBagLayout - oui c'est un peu plus de travail, mais vous pouvez être assuré que si vous faites les choses correctement, votre vue évoluera de manière appropriée. – aperkins

+0

Après avoir construit BEAUCOUP de composants UI, nous n'utilisons plus GridBagLayout - oui, il vous offre de belles options de mise à l'échelle et d'alignement, mais vous ne pouvez rien faire avec certains panneaux avec des LayoutManagers plus simples et le refactoring peut être pénible . Et si vous faites quelque chose de mal, vous pouvez passer une heure à trouver un faux réglage singulier. – Stroboskop

Questions connexes