2010-04-01 14 views
24

Używam outputPanel.setLayout(new BoxLayout(outputPanel, BoxLayout.Y_AXIS));, a następnie dodaję elementy (na przykład JLabels, JButtons) do outputPanel. Na przykład: outputPanel.add(submitButton);.Jak wyśrodkować elementy w BoxLayout, używając środka elementu?

Widzę, że wszystkie dodane elementy są "wyśrodkowane". To dobrze, ponieważ chcę, aby moje elementy znajdowały się w centrum. Kiedy piszę "centrum", mam na myśli "równą odległość od lewej i prawej". Problem polega jednak na tym, że lewa część elementu jest umieszczona w środku. I chcę mieć centrum elementów, które należy umieścić w środku. Jak mogę uzyskać to zachowanie?

+0

Miałem podobny problem i odkryłem, że zamiast używać 'BoxLayout',' FlowLayout' działało lepiej i było łatwiej wyśrodkować obiekty w nim. – JFreeman

Odpowiedz

40

Problem można rozwiązać, korzystając z numeru myLabel.setAlignmentX(Component.CENTER_ALIGNMENT);. Działa z JLabel, JButton i JRadioButton.

+1

Próbowałem tego i zauważyłem, że wszystkie elementy musiały zastosować setAlignmentX (Component.CENTER_ALIGNMENT) do tej samej wartości CENTER_ALIGNMENT. Zastosowanie go tylko do jednego JButton nie pomogło. Również setHorizontalAlignment (SwingConstants.CENTER) w ogóle nie pomógł. Mam nadzieję, że to ci pomoże. –

0

Jak dotąd najlepsza metoda jaką się spotkałem, która współpracuje z każdy rodzaj części:
1. Utwórz nowy JPanel:

JPanel helperPanel = new JPanel();

2. Dodaj składnik (w tym przykładem submitButton) chcesz wyśrodkować poziomo do JPanel:
helperPanel.add(submitButton);

3. Dodaj panel do listy Oryginalny panel (ten z BoxLayout): outerPanel.add(helperPanel);

To wszystko! Można również ustawić wartość na helperPanel, jeśli nie chcesz, aby BoxLayout z outerPanel ją rozwinął.
Jeśli zastanawiasz się, dlaczego to działa: niejawny menedżer układu JPanela to FlowLayout, który automatycznie centruje twoje elementy.

Powiązane problemy