2017-03-24 79 views
0

我有一个JFrame的子类,并在其中有下面的布局。我有一个大panel和一个小buttonsPanel与两个JButtons。我将按钮添加到较小的面板并将该面板添加到第一个面板。按钮应该居中,但它不会发生。在嵌套JPanel中心对齐JButton(BoxLayout)

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); 

我该怎么办?

+0

应该垂直居中还是水平居中? – VGR

+0

@VGR,Horizo​​ntaly。 – parsecer

回答

2

你真的需要阅读关于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的,那么你需要在面板前,后用“胶水”:

Box vertical = Box.createVerticalBox(); 
vertical.add(Box.createVerticalGlue()); 
vertical.add(buttonsPanel); 
vertical.add(Box.createVerticalGlue()); 

再次阅读教程有关更多的基本信息10。

+0

我在添加'buttonsPanel'之前和之后添加了'panel.add(Box.createVerticalGlue())'粘贴,删除了错误的约束,但它仍然不起作用。 和胶水加空的空间...... – parsecer

+1

@parsecer那正是胶水应该在顶部和底部,所以该组件在中间垂直居中不增加空间。如果代码不能按照您期望的方式工作,请发布适当的[mcve]来展示问题。 – camickr