2015-08-08 4 views
0

Я хочу построить простой интерфейс для точки продажи с использованием макета сетки.Gridbag Layout for POS

Я надеялся достичь макета, который изменяет размеры кнопок пропорционально рамке, которая работает, но я не могу сделать кнопку, занимающую более одного места. Кнопка Enter на клавиатуре nums должна быть больше и занимать оставшуюся часть пространства по вертикали. Пожалуйста помоги. Ниже мой код.

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

Создание numbersPanel

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

ответ

0

Установите gridwidth, если у вас есть абсолютное число столбцов для кнопки Enter, чтобы занять или использовать weightx ограничение занять относительное количество пространства в ряд.

How to use GridBagLayout

+0

Спасибо за быстрый ответ. –

+0

@ColmOS Пожалуйста, отметьте как правильный ответ, если он решит вашу проблему. – airowe

+0

Извините, что отвлекся по телефону. Я хочу, чтобы кнопка ввода занимала два пространства по вертикали, поэтому используется cNums.gridheight = 2, но не имеет значения. весомый с gridbagconstraints.RELATIVE делает нижний ряд меньше по высоте. Может быть, мой подход к изменению размеров кнопок неправильный? –

Смежные вопросы