作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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);
我应该做什么?
最佳答案
您确实需要阅读 Layout Managers 上的 Swing 教程。您需要了解什么是“约束”以及何时使用它。
buttonsPanel.add(button1, CENTER_ALIGNMENT);
按钮面板使用 BoxLayout。它不支持任何约束,因此 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 那么你需要在面板前后使用“glue”:
Box vertical = Box.createVerticalBox();
vertical.add(Box.createVerticalGlue());
vertical.add(buttonsPanel);
vertical.add(Box.createVerticalGlue());
再次阅读教程,了解有关 BoxLayout
的更多基本信息。
关于java - 将 JButtons 对齐在嵌套 JPanel 的中心 (BoxLayout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007625/
我是一名优秀的程序员,十分优秀!