我需要在代码中更改什么,以便当我最大化窗口时,按钮将按比例展开?
当我运行程序时,它以我选择的大小开始,但我想使用最大化... 谢谢。
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.WindowConstants;
public class Calculator extends JFrame
{
protected JTextField display;
protected JButton b1 = new JButton("1");
protected JButton b2 = new JButton("2");
protected JButton b3 = new JButton("3");
protected JButton b4 = new JButton("4");
protected JButton b5 = new JButton("5");
protected JButton b6 = new JButton("6");
protected JButton b7 = new JButton("7");
protected JButton b8 = new JButton("8");
protected JButton b9 = new JButton("9");
protected JButton b0 = new JButton("0");
protected JButton addition = new JButton("+");
protected JButton subtraction = new JButton("-");
protected JButton multiplication = new JButton("*");
protected JButton division = new JButton("/");
protected JButton result = new JButton("=");
protected JButton allClear = new JButton("C");
protected JButton decimalPoint = new JButton(".");
public Calculator()
{
super("Calculator");
Handler handler = new Handler();
allClear.addActionListener(handler);
addition.addActionListener(handler);
subtraction.addActionListener(handler);
multiplication.addActionListener(handler);
division.addActionListener(handler);
result.addActionListener(handler);
decimalPoint.addActionListener(handler);
b0.addActionListener(handler);
b1.addActionListener(handler);
b2.addActionListener(handler);
b3.addActionListener(handler);
b4.addActionListener(handler);
b5.addActionListener(handler);
b6.addActionListener(handler);
b7.addActionListener(handler);
b8.addActionListener(handler);
b9.addActionListener(handler);
addition.setToolTipText("Addition");
subtraction.setToolTipText("Subtraction");
multiplication.setToolTipText("Multiplication");
division.setToolTipText("Division");
result.setToolTipText("Result");
allClear.setToolTipText("All Clear");
decimalPoint.setToolTipText("Decimal point");
display = new JTextField(10);
display.setBorder(BorderFactory.createLineBorder(Color.CYAN));
// Set a panel's layout manager using the JPanel constructor
JPanel mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridy = 0;
c.gridwidth = 3;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(display, c);
c = new GridBagConstraints();
c.gridy = 0;
c.gridwidth = 1;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(allClear, c);
c = new GridBagConstraints();
c.gridy = 1;
c.gridwidth = 1;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b1, c);
c = new GridBagConstraints();
c.gridy = 1;
c.gridwidth = 1;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b2, c);
c = new GridBagConstraints();
c.gridy = 1;
c.gridwidth = 1;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b3, c);
c = new GridBagConstraints();
c.gridy = 1;
c.gridwidth = 1;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(division, c);
c = new GridBagConstraints();
c.gridy = 2;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b4, c);
c = new GridBagConstraints();
c.gridy = 2;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b5, c);
c = new GridBagConstraints();
c.gridy = 2;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b6, c);
c = new GridBagConstraints();
c.gridy = 2;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(multiplication, c);
c = new GridBagConstraints();
c.gridy = 3;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b7, c);
c = new GridBagConstraints();
c.gridy = 3;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b8, c);
c = new GridBagConstraints();
c.gridy = 3;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b9, c);
c = new GridBagConstraints();
c.gridy = 3;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(subtraction, c);
c = new GridBagConstraints();
c.gridy = 4;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(b0, c);
c = new GridBagConstraints();
c.gridy = 4;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(decimalPoint, c);
c = new GridBagConstraints();
c.gridy = 4;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(result, c);
c = new GridBagConstraints();
c.gridy = 4;
c.insets = new Insets(5, 5, 5, 5);
mainPanel.add(addition, c);
add(mainPanel);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
pack();
}
最佳答案
您需要设置约束的weightx
和weighty
。这些值之间的关系控制“未使用”空间沿单元的分布方式。请参阅GridBagConstraints documentation 。
您可以将 weightx
和 weighty
约束设置为 1.0 或任何其他严格的正值。
fill
字段必须设置为 BOTH,以便每个按钮占据其整个单元格。
迷你示例,为了可读性而缩小:
public class MiniCalculator extends JFrame {
public static void main(String[] args) {
new MiniCalculator().setVisible(true);
}
private JTextField display = new JTextField(10);
private JButton clear = new JButton("C");
private JButton b1 = new JButton("1");
private JButton b2 = new JButton("2");
private JButton b3 = new JButton("3");
public MiniCalculator() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLayout(new GridBagLayout());
GridBagConstraints constraint = new GridBagConstraints();
constraint.insets = new Insets(5, 5, 5, 5);
constraint.weighty = 1.0;
constraint.weightx = 1.0;
constraint.gridy = 0;
constraint.gridwidth = 2;
constraint.fill = GridBagConstraints.HORIZONTAL;
add(display, constraint);
constraint.gridwidth = 1;
constraint.fill = GridBagConstraints.BOTH;
add(clear, constraint);
constraint.gridy = 1;
add(b1, constraint);
add(b2, constraint);
add(b3, constraint);
pack();
setLocationRelativeTo(null);
}
}
注意:无需创建所有约束,只需创建一个并在添加组件之间更改它即可。添加组件时会克隆约束。
关于java - 调整 JPanel 的大小,以获取在最大化屏幕时使用 GridBagConstraints 的 GridBagLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44797452/