将 GridBagLayout 调整为 JPanel 大小
Adjusting GridBagLayout to JPanel size
我有一个关于 GridBagLayout 的问题。我正在尝试制作一个简单的计算器,并使用 GridBagLayout 将所有按钮放入按钮面板中,尽管它将所有按钮放在中间而不改变按钮的大小,这是合乎逻辑的。我可以在 GridLayout(将按钮的大小调整为 JPanel 的大小)和 GridBagLayout(这样我就可以按我想要的宽度和顺序放置它们)之间找到一些东西吗?
带布局的代码如下:
...
底部面板(){
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
backspace = new JButton("<--");
clean = new JButton("C");
plusminus = new JButton("+/-");
squareroot = new JButton("\u221A");
divide = new JButton("/");
percent = new JButton("%");
multiply = new JButton("*");
fraction = new JButton("1/x");
minus = new JButton("-");
plus = new JButton("+");
dot = new JButton(".");
equals = new JButton("=");
zero = new JButton("0");
one = new JButton("1");
two = new JButton("2");
three = new JButton("3");
four = new JButton("4");
five = new JButton("5");
six = new JButton("6");
seven = new JButton("7");
eight = new JButton("8");
nine = new JButton("9");
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(backspace, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
this.add(clean, gbc);
gbc.gridx = 3;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(plusminus, gbc);
gbc.gridx = 4;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(squareroot, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(seven, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(eight, gbc);
gbc.gridx = 2;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(nine, gbc);
gbc.gridx = 3;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(divide, gbc);
gbc.gridx = 4;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(percent, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(four, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(five, gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(six, gbc);
gbc.gridx = 3;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(multiply, gbc);
gbc.gridx = 4;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(fraction, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(one, gbc);
gbc.gridx = 1;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(two, gbc);
gbc.gridx = 2;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(three, gbc);
gbc.gridx = 3;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(minus, gbc);
gbc.gridx = 4;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 2;
gbc.fill = GridBagConstraints.VERTICAL;
this.add(equals, gbc);
gbc.gridx = 0;
gbc.gridy = 4;
gbc.gridwidth = 2;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
this.add(zero, gbc);
gbc.gridx = 2;
gbc.gridy = 4;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(dot, gbc);
gbc.gridx = 3;
gbc.gridy = 4;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(plus, gbc);
}
结果是:
Calculator
谢谢!
这里至少是朝着正确方向迈出的一步:创建 GridBagConstraints
对象后,将其权重设置为严格大于 0:
gbc.weightx = 0.1;
gbc.weighty = 0.1;
选择哪个值并不重要,只要大于 0.0 且不大于 1.0 即可。这会导致您的大多数按钮水平拉伸以填充可用 space 并垂直均匀分布:
您可能已经意识到,如果您希望按钮随面板变大,您可以使用 gbc.fill = GridBagConstraints.BOTH;
。
我有一个关于 GridBagLayout 的问题。我正在尝试制作一个简单的计算器,并使用 GridBagLayout 将所有按钮放入按钮面板中,尽管它将所有按钮放在中间而不改变按钮的大小,这是合乎逻辑的。我可以在 GridLayout(将按钮的大小调整为 JPanel 的大小)和 GridBagLayout(这样我就可以按我想要的宽度和顺序放置它们)之间找到一些东西吗?
带布局的代码如下:
... 底部面板(){
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
backspace = new JButton("<--");
clean = new JButton("C");
plusminus = new JButton("+/-");
squareroot = new JButton("\u221A");
divide = new JButton("/");
percent = new JButton("%");
multiply = new JButton("*");
fraction = new JButton("1/x");
minus = new JButton("-");
plus = new JButton("+");
dot = new JButton(".");
equals = new JButton("=");
zero = new JButton("0");
one = new JButton("1");
two = new JButton("2");
three = new JButton("3");
four = new JButton("4");
five = new JButton("5");
six = new JButton("6");
seven = new JButton("7");
eight = new JButton("8");
nine = new JButton("9");
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(backspace, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
this.add(clean, gbc);
gbc.gridx = 3;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(plusminus, gbc);
gbc.gridx = 4;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(squareroot, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(seven, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(eight, gbc);
gbc.gridx = 2;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(nine, gbc);
gbc.gridx = 3;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(divide, gbc);
gbc.gridx = 4;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(percent, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(four, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(five, gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(six, gbc);
gbc.gridx = 3;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(multiply, gbc);
gbc.gridx = 4;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(fraction, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(one, gbc);
gbc.gridx = 1;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(two, gbc);
gbc.gridx = 2;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(three, gbc);
gbc.gridx = 3;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(minus, gbc);
gbc.gridx = 4;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 2;
gbc.fill = GridBagConstraints.VERTICAL;
this.add(equals, gbc);
gbc.gridx = 0;
gbc.gridy = 4;
gbc.gridwidth = 2;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
this.add(zero, gbc);
gbc.gridx = 2;
gbc.gridy = 4;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(dot, gbc);
gbc.gridx = 3;
gbc.gridy = 4;
gbc.gridwidth = 1;
gbc.gridheight = 1;
this.add(plus, gbc);
}
结果是:
Calculator
谢谢!
这里至少是朝着正确方向迈出的一步:创建 GridBagConstraints
对象后,将其权重设置为严格大于 0:
gbc.weightx = 0.1;
gbc.weighty = 0.1;
选择哪个值并不重要,只要大于 0.0 且不大于 1.0 即可。这会导致您的大多数按钮水平拉伸以填充可用 space 并垂直均匀分布:
您可能已经意识到,如果您希望按钮随面板变大,您可以使用 gbc.fill = GridBagConstraints.BOTH;
。