2009-10-08 5 views
6
JPanel pMeasure = new JPanel(); 
.... 
JLabel economy = new JLabel("Economy"); 
JLabel regularity = new JLabel("Regularity"); 
pMeasure.add(economy); 
pMeasure.add(regularity); 
... 

Quand je lance le code ci-dessus je reçois cette sortie:Comment faire JLabels commencent sur la ligne suivante

Economy Regularity 

Comment puis-je obtenir cette sortie, où chaque JLabel commence sur une nouvelle ligne? Merci

Economy 
Regularity 
+0

Copie possible de [ajouter des contrôles verticalement au lieu d'utiliser horizontalement la disposition de flux] (http://stackoverflow.com/questions/13510641/add-controls-vertically-instead-of-horizontally-using-flow-layout) – Abhijeet

Répondre

18

Vous voulez jouer avec layout managers pour contrôler le positionnement et le dimensionnement des contrôles dans votre JPanel. Les gestionnaires de mise en page sont chargés de placer les contrôles, de déterminer où ils vont, leur taille, l'espace qui les sépare, ce qui se passe lorsque vous redimensionnez la fenêtre, etc.

Il existe plusieurs types de gestionnaires de mise en page qui permettent chacun vous de mettre en page les contrôles de différentes manières. Le gestionnaire de disposition par défaut est FlowLayout, ce qui, comme vous l'avez vu, place les composants les uns à côté des autres de gauche à droite. C'est le plus simple. D'autres gestionnaires de disposition commune sont:

  • GridLayout - arrange les composants dans une grille rectangulaire avec des lignes de taille égale et de colonnes
  • BorderLayout - a une composante principale dans le centre et jusqu'à quatre composants environnants ci-dessus, ci-dessous, à gauche et à droite.
  • GridBagLayout - Big Bertha de tous les gestionnaires de mise en page intégrés, il est le plus souple, mais aussi le plus compliqué à utiliser.

Vous pouvez, par exemple, utiliser un BoxLayout pour mettre en forme les étiquettes.

BoxLayout empile ses composants les uns sur les autres ou les place dans une rangée - votre choix. Vous pourriez le considérer comme une version de FlowLayout, mais avec une plus grande fonctionnalité. Voici une photo d'une application qui montre comment utiliser BoxLayout pour afficher une colonne de composants centrée:

BoxLayout screenshot http://java.sun.com/docs/books/tutorial/figures/uiswing/layout/BoxLayoutDemo.png

Un exemple de code à l'aide BoxLayout serait:

JPanel pMeasure = new JPanel(); 
.... 
JLabel economy = new JLabel("Economy"); 
JLabel regularity = new JLabel("Regularity"); 
pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS)); 
pMeasure.add(economy); 
pMeasure.add(regularity); 
... 
0

Un moyen rapide est utiliser html dans le JLabel. Par exemple inclure la balise <br/>.

Sinon, implémentez un BoxLayout.

2

Voici ce que vous devez utiliser:

JLabel economy = new JLabel("<html>Economy<br>Regularity</html>"); 
+2

vous permet de créer un seul JLabel, si vous attendez que les données arrivent, vous devez avoir beaucoup plus de code. C'est ... inefficace. – Lolmewn

4

Je lis ce morceau de code:

pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.VERTICAL)); 

Il semble BoxLayout ne pas VERTICAL.Lors de la recherche, cela fonctionnera en utilisant le code suivant:

pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS)); 
+0

@pricepiero Merci 'pMeasure.setLayout (nouveau BoxLayout (pMeasure, BoxLayout.Y_AXIS));' le résout pour moi. Déclare verticalement tous les composants du JPanel. – Abhijeet

0

Faire un JPanel pour chaque ligne, et définir les dimensions pour s'adapter à chaque mot:

JLabel wordlabel = new JLabel("Word"); 

JPanel word1 = new JPanel(); 
word1.setPreferredSize(new Dimension(#,#); 

Cela devrait fonctionner pour chaque mot. Vous pouvez ensuite ajouter chacun de ces JPanels à votre JPanel principal. Cela vous permet également d'ajouter d'autres composants à côté de chaque mot.

Questions connexes