2012-03-04 21 views
5

Jestem całkiem nowy, Java i próbuję utworzyć aplikację GUI z niektórych etykiet, przycisków i pól tekstowych. Program jest dość prosty i po prostu chciałem użyć domyślnego układu, którym jest FlowLayout. Udało mi się rozmieścić i dopasować wszystko dobrze, ale jedyną rzeczą, która wydaje się nie działać, jest wyrównanie. Chcę umieszczać przyciski i pola tekstowe z pewnymi dopasowaniami, ale gdy tylko ustawię wyrównanie, przesuwa tekst wewnątrz dowolnego obiektu, a nie samego obiektu. Na przykład, napisałem:Java Swing FlowLayout Wytyczne

button.setHorizontalAlignment(JButton.RIGHT); 

ale wydaje się, że wyrównuje tekst wewnątrz przycisku zamiast samego przycisku. Czy istnieje sposób wyrównania samego przycisku, a nie tekstu wewnątrz?

Wiem, że wyrównanie może być łatwiejsze z innym typem układu (np. BoxLayout), ale po prostu chcę użyć FlowLayout dla tego, chyba że nie jest możliwe wyrównywanie ich za pomocą FlowLayout (czego nie robię tak sądzę).

Z góry dziękuję.

+2

+1 miły pytanie, na Swing jest lepsze pytania pocztowe z [SSCCE] (http://sscce.org/) – mKorbel

Odpowiedz

13

Zobacz konstruktora FlowLayout(int align).

konstruuje nowy FlowLayout z określonym wyrównania i domyślnej 5-zespołu szczeliny poziome i pionowe. Wartość argumentu wyrównania musi być jednym z FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING lub FlowLayout.TRAILING.

Wydaje jesteś po FlowLayout.RIGHT jak widać w this answer (kombi i zaznacz pole u góry).

+0

TAK, zadziałało. Oczywiście potrzebuję użyć innych rodzajów układów, aby uzyskać lepsze wyrównanie, ale działa to całkiem dobrze. Dzięki. – Dennis

+1

Potem wybrałbym układ zagnieżdżony jak wyżej. Chociaż jedynym układem poza układem przepływu jest centrowanie obrazu w 'GridBagLayout'. Ten ostatni nie jest osiągnięty w konstruktorze, ale przy użyciu ograniczenia układu (lub raczej zaniedbania jego użycia) podczas dodawania obrazu. –

+0

@AndrewThompson: Kiedy piszę to 'JPanel plafComponents = new JPanel (new FlowLayout (FlowLayout.RIGHT, 3,3));', to daje mi błąd mówiąc, że nie mogę znaleźć symbolu, VARIABLE Right lub czegokolwiek używam. Czy coś jest nie tak z moim JDK? Mogę jednak użyć normalnego konstruktora FlowLayout. Mam nadzieję, że możesz mi doradzić, co jest nie tak z mojego powodu? lub Czy mam rozpocząć nowy wątek? –

2

setHorizontalAlignment z AbstractButton ustawia poziome wyrównanie ikon i tekstu nie położenie przycisku. Domyślnie AbstractButton to SwingConstants.CENTER.

Jeśli chcesz wyrównać button..set pozycję podczas dodawania go do panelu lub frame..something tak ....

p.add(button, BorderLayout.SOUTH);//using `BorderLayout` 

układy przepływowe są zazwyczaj stosowane w celu ustalenia Przyciski w płyta. Ustawi przyciski od lewej do prawej, dopóki żadne przyciski nie zmieszczą się na tej samej linii.

+0

Nie sądzę tej pracy .. Próbowałem, ale nic się nie zmienia. Mówi, że drugi parametr dotyczy pozycji, ale z jakiegoś powodu nic nie zmienia. – Dennis

2

Nie sądzę, można to zrobić z FlowLayout sam.

Moje propozycje to:

  • rozważyć przejście na MigLayout który jest o wiele bardziej wydajny mechanizm układ. MigLayout zasadniczo pozwala pozycjonować komponenty w elastycznej siatce, a także można ustawić specyficzne wyrównanie komponentu w obrębie każdej komórki siatki.
  • Gdy chcesz wyrównanie składowych, ale także często sens, aby umieścić je wewnątrz zagnieżdżonej JPanel. Możesz użyć oddzielnego układu dla tego JPanel (może być BorderLayout?), Który pozwoli ci uzyskać dokładne wyrównanie, które chcesz.