一个java侧栏的GridBagLayout
-
19-09-2019 - |
题
我试图绘制一个侧边栏,我工作的一个项目。我选择使用GridBagLayout的,因为我感到十分失望的BoxLayout的局限性。有人能帮忙解释一下我做错了。我想是的侧栏包含两个JPanels。我有地方的代码它们一半,侧边栏,而不是在顶部。有人能解释我在这里失踪。
JPanel sideBar = new JPanel();
sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
sideBar.setLayout(new GridBagLayout());
JPanel optionBar = new JPanel();
optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
optionBar.setLayout(new GridBagLayout());
JPanel buttonBar = new JPanel();
buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
buttonBar.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.ipady = 5;
c.insets = new Insets(10,0,0,0);
JButton simplify;
simplify = new JButton("Open");
simplify.addActionListener( this.listener );
c.gridy = 0;
buttonBar.add(simplify, c);
JButton mergeButton;
mergeButton = new JButton("Close");
mergeButton.addActionListener( this.listener );
c.gridy = 1;
buttonBar.add(mergeButton, c);
JButton splitButton;
splitButton = new JButton("Merge");
splitButton.addActionListener( this.listener );
c.gridy = 2;
buttonBar.add(splitButton, c);
c.insets = new Insets(0,5,5,5);
c.gridy = 0;
sideBar.add(optionBar, c);
c.gridy = 1;
c.ipadx = 70;
sideBar.add(buttonBar, c);
return(sideBar);
解决方案
的GridBagLayout将仅分配足够的垂直空间,一个部件需要,留下其余部分为空白。我希望你看到你的侧边栏组件垂直居中?
在以“推”的组件时,需要设置一个垂直权重。如果设置weighty
约束,以1.0的最后一个组件,它会占用该组件的所有剩余的垂直空间,其余推至顶部。 (您可能还需要锚定,上面板GridBagConstraints.NORTH
)。
c.weighty = 1.0
前尝试sideBar.add(buttonBar, c);
其他提示
如果您熟悉/更舒适的HTML,你可以使用 table2gridbag 。这是一个小控制台工具,需要一个布局描述(HTML表)并翻译该成等效的布局描述用于配置的GridBagLayout管理器
这是我的代码放在他们 中途下侧边栏,而不是在 顶部。
此外,使用布局管理器时,如果未使用的setBounds()或的setSize()。
不隶属于 StackOverflow