我有一个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);
我该怎么办?
答案 0 :(得分: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());
再次阅读教程,了解有关BoxLayout
。