2010-04-01 48 views
24

Tôi sử dụng outputPanel.setLayout(new BoxLayout(outputPanel, BoxLayout.Y_AXIS)); và sau đó tôi thêm các phần tử (ví dụ: JLabels, JButtons) vào outputPanel. Ví dụ: outputPanel.add(submitButton);.Làm cách nào để căn giữa các phần tử trong BoxLayout bằng cách sử dụng trung tâm của phần tử?

Tôi thấy rằng tất cả các phần tử được thêm đều là "căn giữa". Nó là tốt, bởi vì tôi muốn các yếu tố của tôi được ở trung tâm. Khi tôi viết "trung tâm", tôi có nghĩa là "khoảng cách bằng nhau từ trái và phải". Nhưng vấn đề là phần bên trái của phần tử được đưa vào trung tâm. Và tôi muốn có trung tâm của các yếu tố được đưa vào trung tâm. Làm thế nào tôi có thể nhận được hành vi này?

+0

Tôi đã gặp sự cố tương tự và thấy rằng thay vì sử dụng 'BoxLayout',' FlowLayout' hoạt động tốt hơn và dễ căn giữa hơn giữa các đối tượng trong đó. – JFreeman

Trả lời

40

Sự cố có thể được giải quyết bằng cách sử dụng myLabel.setAlignmentX(Component.CENTER_ALIGNMENT);. Nó hoạt động với JLabel, JButtonJRadioButton.

+1

Tôi đã thử điều đó và nhận thấy rằng tất cả các mục phải áp dụng setAlignmentX (Component.CENTER_ALIGNMENT) cho cùng một giá trị của CENTER_ALIGNMENT. Áp dụng nó chỉ cho một JButton đã không giúp đỡ. Ngoài ra setHorizontalAlignment (SwingConstants.CENTER) không giúp gì cả. Hy vọng đây là một trợ giúp cho bạn. –

0

Cho đến nay phương pháp tốt nhất mà tôi đã gặp làm việc với mỗi loại thành phần:
1. Tạo mới JPanel:

JPanel helperPanel = new JPanel();

2. Thêm các thành phần (trong này ví dụ submitButton) bạn muốn căn giữa theo chiều ngang đến JPanel:
helperPanel.add(submitButton);

3. Thêm bảng vào bảng điều khiển gốc (bảng điều khiển có Hộp thư): outerPanel.add(helperPanel);

Vậy đó! Bạn cũng có thể đặt kích thước tối đa trên helperPanel nếu bạn không muốn BoxLayout của outerPanel mở rộng.
Nếu bạn đang tự hỏi tại sao điều này hoạt động: trình quản lý bố cục ngầm của JPanel là FlowLayout, tự động tập trung các phần tử của bạn.

Các vấn đề liên quan