POS 的网格袋布局

Gridbag Layout for POS

我想使用 gridbag 布局为销售点构建一个简单的界面。

我希望实现一种布局,它可以根据有效的框架按比例调整按钮的大小,但我不能让一个按钮占用多个 space。数字键盘上的 Enter 按钮应该更大,并垂直占据 space 的其余部分。请帮忙。下面是我的代码。

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();
}
}

如果您有绝对数量的列供 Enter 按钮占用或使用 weightx 约束在行中占用相对数量的 space,请设置网格宽度。

How to use GridBagLayout