我想设置我的屏幕中心的JButton的大小变大,但我似乎无法使用GridBagLayouts找到如何做到这一点。
以下是它的样子:
这是我的代码:
// Client
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
c.gridy = 5;
c.gridx = 5;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(10, 1, 1, 10);
p.add(b[0], c);
// Server
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
c.gridy = 10;
c.gridx = 5;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(10, 1, 1, 10);
p.add(b[1], c);
我希望按钮占据周围空白区域的更大部分。
答案 0 :(得分:1)
我无法想象你想要什么,但如果你想让你的按钮填满,你可以添加
c.weightx = ...; //Specifies how to distribute extra horizontal space.
or c.weighty = ...; //Specifies how to distribute extra vertical space.
答案 1 :(得分:1)
添加了更多信息:按钮具有宽度的50%和[约]父母高度的20%[一起50%高度,包括其间的空间]。 (稍微改写以符合建议。)
<强>解决方案强>
简单布局布局的组合。虽然如果你这样做,你将有3列或3行无法连接,其余的可以在以后轻松更改:
// row variation
JPanel parent = new JPanel();
parent.setLayout(new GridLayout(3, 1));
parent.add(new JPanel()); // placeholder for 1st row
JPanel row = new JPanel(); // 2nd row
row.setLayout(new GridLayout(1, 3)); // create 3 cells of equal size
row.add(new JPanel()); // 2nd row, 1st cell placeholder
// now you have a 33% x 33% (oops) rectangle in the middle
JPanel controls = new JPanel();
controls.setLayout(new GridLayout(2, 1, 10, 10));
controls.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10);
controls.add(new JButton("Client"));
controls.add(new JButton("Server"));
row.add(controls); // add 2nd row, 2nd cell
row.add(new JPanel()); // 2nd row, 3rd cell placeholder
parent.add(row); // add 2nd row
parent.add(new JPanel()); // placeholder for 3rd row
很简单,但您以后无法加入细胞:
JPanel parent = new JPanel(); parent.setLayout(newGridLayout(9,9));
底线:组合不同的布局管理器,将2个按钮放在面板中并在里面放置一些占位符,然后它也应该可以正常使用GridBagLayout。也就是说,我会尽量保持灵活性编写可重用组件,可以轻松地与任何布局管理器结合使用。那么你就不必使用占位符多余的代码来正确显示组件。
旧答案
替代解决方案:使用BoxLayout
BoxLayout在查看代码时更直观,更容易理解(当然这只是一种观点)。
决定你的窗口是如何被构造的(它更像是彼此重叠的大水平组件PAGE_AXIS
或彼此相邻的大垂直组件LINE_AXIS
)并将其用作外部BoxLayout的:
JPanel content = new JPanel(); // or frame
content.setLayout(new BoxLayout(content, BoxLayout.LINE_AXIS));
沿着轴添加组件,在另一个轴上有多个组件,使用第二个BoxLayout。您可以通过创建刚性区域(空矩形始终具有相同的大小)或添加胶水(像胶一样扩展到组件)来分隔组件。
content.add(BoxLayout.createHorizntalGlue());
JPanel col = new JPanel();
col.setLayout(new BoxLayout(col, BoxLayout.PAGE_AXIS));
JButton clientBtn = new JButton("Client");
JButton serverBtn = new JButton("Server");
col.add(BoxLayout.createVerticalGlue());
col.add(clientBtn);
col.add(BoxLayout.createRigidArea(new Dimension(1, 10)));
col.add(serverBtn);
col.add(BoxLayout.createVerticalGlue());
content.add(col);
content.add(BoxLayout.createHorizontalGlue());
答案 2 :(得分:1)
button.setMargin( new Insets(50, 50, 50, 50) );
这将为按钮添加额外的空间,并允许布局管理员根据按钮的首选大小完成工作。