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

Quando eseguo il codice qui sopra ottengo questo output:Come rendere JLabels iniziano nella riga successiva

Economy Regularity 

Come posso ottenere questo risultato, in cui ogni JLabel inizia su una nuova linea? Grazie

Economy 
Regularity 
+0

Possibile duplicato di [aggiungi controlli verticalmente anziché orizzontalmente utilizzando il layout del flusso] (http://stackoverflow.com/questions/13510641/add-controls-vertically-instead-of-horizontally-using-flow-layout) – Abhijeet

risposta

18

Avrai voglia di giocare con layout managers per controllare il posizionamento e dimensionamento dei controlli nel vostro JPanel. I gestori dei layout sono responsabili della collocazione dei controlli, della posizione, della dimensione della finestra, ecc.

Ci sono una gran quantità di gestori di layout diversi, ciascuno dei quali consente ai controlli del layout in diversi modi. Il gestore di layout predefinito è FlowLayout, che come hai visto semplicemente posiziona i componenti l'uno accanto all'altro da sinistra a destra. Questo è il più semplice Alcuni altri gestori di layout comuni sono:

  • GridLayout - dispone i componenti in una griglia rettangolare con righe e colonne
  • BorderLayout uguali dimensioni - ha una componente principale nel centro e fino a quattro componenti circostanti sopra, sotto, a sinistra e a destra.
  • GridBagLayout - Big Bertha di tutti i gestori di layout integrati, è il più flessibile ma anche il più complicato da utilizzare.

Si potrebbe, ad esempio, utilizzare un BoxLayout per impaginare le etichette.

BoxLayout impilano i componenti l'uno sopra l'altro o li posiziona in fila, a scelta. Si potrebbe pensare ad esso come una versione di FlowLayout, ma con una maggiore funzionalità. Ecco una foto di un'applicazione che illustra l'utilizzo di BoxLayout per visualizzare una colonna al centro di componenti:

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

Un esempio di codice utilizzando BoxLayout sarebbe:

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 modo veloce è usare html all'interno di JLabel. Ad esempio include il tag <br/>.

Altrimenti, implementare un BoxLayout.

2

Ecco ciò che è necessario utilizzare:

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

Questo ti permetterebbe di creare solo una JLabel, se stai aspettando che i dati entrino richiede che tu abbia molto più codice. È .. inefficiente. – Lolmewn

4

ho letto questo pezzo di codice:

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

sembra BoxLayout non ha VERTICALE.Al momento la ricerca, questo funzionerà utilizzando il seguente codice:

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

@pricepiero Grazie 'pMeasure.setLayout (nuovo BoxLayout (pMeasure, BoxLayout.Y_AXIS)),' lo risolve per me. Mostra verticalmente tutti i componenti in JPanel. – Abhijeet

0

Fai un JPanel separato per ogni linea, e impostare le dimensioni per adattarsi ogni parola:

JLabel wordlabel = new JLabel("Word"); 

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

Questo dovrebbe funzionare per ogni parola. Puoi quindi aggiungere ciascuno di questi JPanel al tuo JPanel principale. Ciò consente anche di aggiungere altri componenti accanto a ogni parola.