我想使用 gridbag 布局为销售点构建一个简单的界面。
我希望实现一种布局,它可以根据有效的框架重新调整按钮的大小,但我不能让一个按钮占用一个以上的空间。数字键盘上的 Enter 按钮应该更大,并垂直占据剩余空间。请帮忙。下面是我的代码。
public class Tillview2 {
private JButton b0;
private JButton b1;
private JButton b2;
private JButton b3;
private JButton b4;
private JButton b5;
private JButton b6;
private JButton b7;
private JButton b8;
private JButton b9;
private JButton b00;
private JButton bdot;
private JButton bclear;
private JButton bbacksp;
private JButton bent;
public void init() {
JFrame mainFrame = new JFrame("Point Of Sale - Till");
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
mainFrame.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
JPanel itemListPanel = new JPanel();
JPanel categoryPanel = new JPanel();
JPanel numbersPanel = new JPanel();
JPanel hotkeyPanel = new JPanel();
c.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(itemListPanel, c);
mainFrame.add(itemListPanel);
JButton itemList = new JButton("Item List"); /// <-------TEMP
itemListPanel.add(itemList);
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(categoryPanel, c);
mainFrame.add(categoryPanel);
JButton categorys = new JButton("Categorys"); /// <------TEMP
categoryPanel.add(categorys);
c.gridwidth = GridBagConstraints.BOTH;
gridbag.setConstraints(numbersPanel, c);
mainFrame.add(numbersPanel);
gridbag.setConstraints(hotkeyPanel, c);
mainFrame.add(hotkeyPanel);
JButton hotkey = new JButton("Hoy keys"); /// <------ TEMP
hotkeyPanel.add(hotkey);
创建数字面板
b0 = new JButton("0");
b1 = new JButton("1");
b2 = new JButton("2");
b3 = new JButton("3");
b4 = new JButton("4");
b5 = new JButton("5");
b6 = new JButton("6");
b7 = new JButton("7");
b8 = new JButton("8");
b9 = new JButton("9");
b00 = new JButton("00");
bdot = new JButton(".");
bclear = new JButton("C");
bbacksp = new JButton("Bsp");
bent = new JButton("Ent");
GridBagLayout gbNums = new GridBagLayout();
GridBagConstraints cNums = new GridBagConstraints();
cNums.fill = GridBagConstraints.BOTH;
numbersPanel.setLayout(gbNums);
cNums.weightx = 1.0;
cNums.weighty = 1.0;
cNums.fill = GridBagConstraints.BOTH;
gbNums.setConstraints(b7, cNums);
numbersPanel.add(b7);
gbNums.setConstraints(b8, cNums);
numbersPanel.add(b8);
gbNums.setConstraints(b9, cNums);
numbersPanel.add(b9);
cNums.gridwidth = GridBagConstraints.REMAINDER;
gbNums.setConstraints(bbacksp, cNums);
numbersPanel.add(bbacksp);
cNums.gridwidth = GridBagConstraints.BOTH;
gbNums.setConstraints(b4, cNums);
numbersPanel.add(b4);
gbNums.setConstraints(b5, cNums);
numbersPanel.add(b5);
gbNums.setConstraints(b6, cNums);
numbersPanel.add(b6);
cNums.gridwidth = GridBagConstraints.REMAINDER;
gbNums.setConstraints(bclear, cNums);
numbersPanel.add(bclear);
cNums.gridwidth = GridBagConstraints.BOTH;
gbNums.setConstraints(b1, cNums);
numbersPanel.add(b1);
gbNums.setConstraints(b2, cNums);
numbersPanel.add(b2);
gbNums.setConstraints(b3, cNums);
numbersPanel.add(b3);
cNums.gridwidth = GridBagConstraints.REMAINDER;
cNums.gridheight = 2;
gbNums.setConstraints(bent, cNums);
numbersPanel.add(bent);
cNums.gridwidth = GridBagConstraints.BOTH;
gbNums.setConstraints(b0, cNums);
numbersPanel.add(b0);
gbNums.setConstraints(bdot, cNums);
numbersPanel.add(bdot);
//cNums.gridwidth = GridBagConstraints.RELATIVE;
gbNums.setConstraints(b00, cNums);
numbersPanel.add(b00);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(600, 400);
mainFrame.setVisible(true);
}
public static void main(String args[]) {
Tillview2 ex1 = new Tillview2();
ex1.init();
}
}