将 JButton 对齐在嵌套的 JPanel (BoxLayout) 的中心



我有一个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的更多基本信息。

相关内容

  • 没有找到相关文章

最新更新