Phụ thuộc vào hành vi sẽ xảy ra khi cửa sổ được thay đổi kích thước. Nhưng bạn sẽ không tránh xây dựng một cấu trúc cây với JPanels.
Thành phần trên cùng có thể có BorderLayout, với một bảng điều khiển ở phía Bắc và bảng chính ở Trung tâm.
Bảng điều khiển phía Bắc sẽ có Hộp trục X và chứa hai bảng.
Cả hai bảng này phải có Hộp trục YLay và cột thứ nhất sẽ chứa A, C, F và ô thứ hai B, D, E.
Bạn cũng nên đặt kích thước ưa thích cho ABCDE và F sao cho chúng hiển thị với kích thước phù hợp.
EDIT:
Ở đây, tôi tạo ra một ví dụ:
public class GladysPanel extends JPanel
{
public GladysPanel(JComponent A, JComponent B, JComponent C, JComponent D, JComponent E, JComponent F, JComponent main){
super(new BorderLayout());
JPanel abcdef = new JPanel(new BorderLayout());
Box ab = new Box(BoxLayout.X_AXIS);
ab.add(A);
ab.add(B);
abcdef.add(ab, BorderLayout.NORTH);
Box cdef = new Box(BoxLayout.X_AXIS);
Box cf = new Box(BoxLayout.Y_AXIS);
cf.add(C);
cf.add(F);
cf.add(Box.createVerticalGlue());
Box de = new Box(BoxLayout.Y_AXIS);
de.add(D);
de.add(E);
de.add(Box.createVerticalGlue());
cdef.add(cf, BorderLayout.WEST);
cdef.add(de, BorderLayout.EAST);
abcdef.add(cdef);
add(abcdef, BorderLayout.NORTH);
add(main);
}
public static void main(String[] args){
JPanel A = new JPanel();
A.setOpaque(true);
A.setBackground(Color.BLUE);
A.add(new JLabel("A"));
JPanel B = new JPanel();
B.setOpaque(true);
B.setBackground(Color.LIGHT_GRAY);
B.add(new JLabel("B"));
JPanel C = new JPanel();
C.setPreferredSize(new Dimension(0, 100));
C.setOpaque(true);
C.setBackground(Color.RED);
C.add(new JLabel("C"));
JPanel D = new JPanel();
D.setOpaque(true);
D.setBackground(Color.PINK);
D.add(new JLabel("D"));
JPanel E = new JPanel();
E.setOpaque(true);
E.setBackground(Color.YELLOW);
E.add(new JLabel("E"));
E.setPreferredSize(new Dimension(0, 60));
JPanel F = new JPanel();
F.setOpaque(true);
F.setBackground(Color.MAGENTA);
F.add(new JLabel("F"));
JPanel main = new JPanel();
main.setOpaque(true);
main.setBackground(Color.WHITE);
main.add(new JLabel("main"));
GladysPanel panel = new GladysPanel(A, B, C, D, E, F, main);
JFrame example = new JFrame("Gladys example");
example.setContentPane(panel);
example.setSize(300, 300);
example.setVisible(true);
}
}
bạn có thể bỏ qua các phương thức setPreferredSize(), tôi đã thêm nó chỉ để demonstate hành vi. Bạn cũng có thể thử thay đổi kích thước cửa sổ. Mã này ngắn hơn nhiều khi sử dụng GridBagLayout.
Nguồn
2012-03-12 00:18:44
Không, đừng _not_ sử dụng ['setPreferredSize()'] (http: // stackoverflow.com/q/7229226/230513); cho phép nội dung xác định kích thước sau 'pack()'. – trashgod
-1 nếu _wont tránh xây dựng một tree_ dịch thành "làm tổ bảng" (theo mô tả của bạn): chỉ đơn giản là sai - có LayoutManagers (ngay cả trong lõi) mà có thể đạt được gần như mọi mục tiêu mà không cần – kleopatra
Tất nhiên, bạn thậm chí có thể sử dụng cách bố trí rỗng. Nhưng một số bố cục dễ sử dụng hơn và rõ ràng hơn so với các bố cục khác. Ý tôi là, hãy nhìn vào mã của Gagandeep. –