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

Kiedy uruchomić kod powyżej uzyskać ten wynik:Jak JLabels rozpocząć w następnym wierszu

Economy Regularity 

Jak mogę uzyskać to wyjście, gdzie każdy JLabel zaczyna się w nowym wierszu? Dzięki

Economy 
Regularity 
+0

Możliwy duplikat [dodaj elementy sterujące w pionie zamiast w poziomie za pomocą układu przepływu] (http://stackoverflow.com/questions/13510641/add-controls-vertically-instead-of-horizontally-using-flow-layout) – Abhijeet

Odpowiedz

18

Będziemy chcieli się bawić z layout managers kontrolować pozycjonowanie i wymiarowanie elementów sterujących w JPanel. Kierownicy układów są odpowiedzialni za umieszczanie kontrolek, określanie, gdzie się znajdują, jak duże są, ile miejsca między nimi, co się dzieje, gdy zmieniasz rozmiar okna, itp.

Istnieje wiele menedżerów układów, z których każdy pozwala do kontroli układu na różne sposoby. Domyślnym menedżerem układu jest FlowLayout, który, jak widzieliśmy, po prostu umieszcza komponenty obok siebie od lewej do prawej. To najprostsze. Kilka innych menedżerów wspólny układ to:

  • GridLayout - układa komponenty w prostokątnej siatce z wierszy równa wielkości i kolumn
  • BorderLayout - ma jeden główny składnik w centrum i do czterech otaczających elementów powyżej, poniżej, po lewej i po prawej.
  • - Big Bertha wszystkich wbudowanych menedżerów układów, jest najbardziej elastyczny, ale także najbardziej skomplikowany w użyciu.

Można na przykład użyć BoxLayout do rozmieszczenia etykiet.

BoxLayout albo układa swoje komponenty jeden na drugim lub umieszcza je w rzędzie - do wyboru. Możesz myśleć o tym jako o wersji FlowLayout, ale o większej funkcjonalności. Oto zdjęcie z aplikacji, która demonstruje użycie BoxLayout aby wyświetlić wyśrodkowany kolumnę elementów:

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

Przykładem kodu przy użyciu BoxLayout byłoby:

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

Szybkim sposobem jest używać html w JLabel. Na przykład dodaj znacznik <br/>.

W przeciwnym razie zaimplementuj BoxLayout.

2

Oto co trzeba użyć:

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

To pozwoliłoby ci stworzyć tylko jeden JLabel, jeśli czekasz na dane do niego wchodzące, musisz mieć o wiele więcej kodu. To ... nieskuteczne. – Lolmewn

4

czytam ten fragment kodu:

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

Wydaje BoxLayout nie posiada pionowych.Po przeszukaniu, to będzie działać za pomocą następującego kodu:

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

@pricepiero Dzięki 'pMeasure.setLayout (nowy BoxLayout (pMeasure, BoxLayout.Y_AXIS));' rozwiązuje to dla mnie. Pionowo rozkłada wszystkie komponenty w JPanel. – Abhijeet

0

Zrób osobną JPanel dla każdej linii i ustawić wymiary, aby pasowały każde słowo:

JLabel wordlabel = new JLabel("Word"); 

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

ten powinien działać na każdym słowie. Następnie możesz dodać każdy z tych JPaneli do głównego JPanela. Pozwala to również dodawać inne komponenty obok każdego słowa.