Я пытаюсь показать сообщение JLabel
сообщения под сеткой отображаемых квадратов (каждый квадрат - JLabel
). Когда я не пытаюсь добавить сообщение в JPanel
, сетка квадратов 4x4 будет отображаться просто отлично. Однако, когда я пытаюсь добавить сообщение JLabel
ниже или выше сетки, происходит то, что сетка квадратов становится разделенной на две части (после первого столбца квадратов), так что один столбец квадратов отображается слева, а затем это пробел, а затем отображаются три других столбца квадратов. Появится сообщение внизу. Почему добавление этого сообщения приводит к тому, что сетка квадратов разбивается так? Я поставил свой код ниже. Спасибо заранее за любую помощь.GridBagLayout делать странные вещи при попытке добавить сообщение JLabel ниже сетки квадратов
public void displayGrid(JButton button) {
JLabel instructionsLabel = new JLabel ("Select the locations of the four objects that you saw previously. Be careful - when you select one box, you can't take it back.");
try {
squareImage = ImageIO.read(this.getClass().getResource("stimulus(0).gif"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0; i < 16; i++){
c.gridx = i % 4;
c.gridy = i/4;
squareLabels[i] = new JLabel(new ImageIcon(squareImage));
panel.add(squareLabels[i], c);
squareLabels[i].addMouseListener(this);
}
panel.validate();
c.gridy += 1;
c.gridx = 0;
panel.add(instructionsLabel, c);
panel.validate();
}
Вы имеете в виду GridBagConstraints? Я думал, что использование одного и того же экземпляра - это вся идея. Если вы используете два разных GridBagConstraints, вы не сможете сделать это так, чтобы они не мешали друг другу. – lb91
Нет проблем с повторным использованием 'GridBagConstraints': https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html – Berger
Хорошо, я уверен, что у меня были проблемы в прошлое с использованием того же объекта GridBagConstraints, но я готов признать, что я ошибаюсь. У вас очень понятные манипуляции с моделью ввода-вывода и Swing в одном и том же потоке в вашем коде - рассмотрите возможность использования SwingWorker для управления задачей ввода-вывода. Кроме того, у вас есть «c.gridy = i/4;» там, который выглядит как ошибка для меня - это по дизайну? – Lee