我有一个JFrame
的子类,里面有以下布局。我有一个大panel
和一个小buttonsPanel
,有两个JButtons
.我将按钮添加到较小的面板,并将该面板添加到第一个面板。按钮应该居中,但它不会发生。
panel=new JPanel();
add(panel);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JButton button1=new JButton("button1");
JButton button2=new JButton("button2");
buttonsPanel=new JPanel();
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
buttonsPanel.add(button1, CENTER_ALIGNMENT);
buttonsPanel.add(button2, CENTER_ALIGNMENT);
panel.add(buttonsPanel, BorderLayout.CENTER);
我该怎么办?
你真的需要阅读布局管理器上的 Swing 教程。您需要了解什么是"约束"以及何时使用它。
buttonsPanel.add(button1, CENTER_ALIGNMENT);
按钮面板使用框布局。它不支持任何约束,因此CENTER_ALIGNMENT毫无意义。
panel.add(buttonsPanel, BorderLayout.CENTER);
同样,面板使用 BoxLayout。不能只使用 BorderLayout 约束。
使组件居中(垂直和水平在框架上(的最简单方法是使用 GridBagLayout。
所以基本代码可能是这样的:
JPanel buttonsPanel = new JPanel();
buttonsPanel.add(button1);
buttonsPanel.add(button2);
frame.setLayout( new GridBagLayout() );
frame.add(buttonsPanel, new GridBagConstraints());
如果你想尝试使用BoxLayout,那么你需要在面板之前和之后使用"胶水":
Box vertical = Box.createVerticalBox();
vertical.add(Box.createVerticalGlue());
vertical.add(buttonsPanel);
vertical.add(Box.createVerticalGlue());
同样,请阅读教程以获取有关BoxLayout
的更多基本信息。