Swing: макет с помощью GridBagLayout - PullRequest
0 голосов
/ 06 июня 2019

Я бы хотел создать клавиатуру с графическим интерфейсом, используя Swing.

Однако во втором ряду символ a должен начинаться не с самого левого края, а чуть правее. Поэтому я добавил c.gridx = 1 в мой код.

К сожалению, это не работает:

https://i.imgur.com/FxJfNKs.png

Может ли кто-нибудь помочь мне найти причину?

Код:

this.qwertyKeyboard = new JPanel();
this.qwertyKeyboard.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;

c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.weighty = 1;
c.weightx = 1;

char[] keysRow1 = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'};
char[] keysRow2 = {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'};
char[] keysRow3 = {'⇧', 'z', 'x', 'c', 'v', 'b', 'n', 'm'};
Map<String, Integer> keysRow4 = new LinkedHashMap<>();
keysRow4.put("Draft", 4);
keysRow4.put("Space", 12);
keysRow4.put("Send", 4);

for (char key : keysRow1) {
    qwertyKeyboard.add(new Key(key, l), c);
    c.gridx += 2;
}

c.gridx = 1;
c.gridy = 1;

for (char key : keysRow2) {
    qwertyKeyboard.add(new Key(key, l), c);
    c.gridx += 2;
}

c.gridx = 0;
c.gridy = 2;

for (char key : keysRow3) {
    qwertyKeyboard.add(new Key(key, l), c);
    c.gridx += 2;
}

c.gridx = 0;
c.gridy = 3;

keysRow4.forEach((key, value) -> {
    c.gridwidth = value;
    qwertyKeyboard.add(new JButton(key), c);
    c.gridx += value;
});
...