У меня возникают проблемы при добавлении JPanels в JFrame. В моем JFrame есть GridBagLayout, куда я добавляю эти JPanels горизонтально, я тестировал его в двух случаях, первый отображал 55 JPanels, расположенных в строке с полосой прокрутки, второй вообще не работал, он должен был отображать 76 JPanels, но результат получился очень странным:
Я не публикую код, потому что думаю, что он не имеет ничего общего с кодом, возможно, это предел программирования GUI с помощью Swing. Я не смог найти никакой информации об этом (ограничении) или той же проблеме, которая происходит со мной.
Спасибо
Хорошо, я работал над следующим кодом:
import javax.swing.*;
import java.awt.*;
public class TestingFrame extends JPanel {
public TestingFrame() {
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.0;
gbc.weighty = 0.0;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.BOTH;
int numOfPanels = 10000;
for (int i = 0; i < numOfPanels; ++i) {
JPanel toAdd = new JPanel();
JButton tmp = new JButton("HELLO IT'S ME");
toAdd.add(tmp);
gbc.gridx = i;
this.add(toAdd, gbc);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
TestingFrame view = new TestingFrame();
JScrollPane scrPane = new JScrollPane(view);
frame.add(scrPane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Этот код воспроизводит ошибку, о которой я вам говорил ранее. Обратите внимание, что для воспроизведения ошибки потребовалось больше панелей из-за количества компонентов JPanels, которые я использую сейчас, они меньше, чем исходные (всего одна кнопка).
И, не видя кода, я не могу сказать вам, в чем проблема, но я могу дать оценку, основываясь на моем личном опыте с ошибками: 99,999% случаев проблема связана с моим собственным кодом, а не с самой Java. Держу пари, что ваши шансы похожи на мои.
@HovercraftFullOfEels Конечно, в 99.999999999% случаев проблема - моя, но я предполагал, что на этот раз нет. Работаю над тем, чтобы сделать код независимым или похожий код, который вызывает ту же ошибку, как только я ее получу, я опубликую ее.
Это мудрое решение
В вашем графическом интерфейсе есть артефакты рисования, что иногда происходит, если код блокирует поток событий при создании.
@HovercraftFullOfEels Извините? Вы говорите, что может быть какое-то вытеснение потоков? Полагаю, это будет сложно отладить? Кстати, я выложил код, который воспроизводит ошибку :)
@HovercraftFullOfEels Почему это "приостановлено"? Я разместил минимальный, полный и проверяемый фрагмент кода. Разве это не то, что вы хотели проверить, что это происходит?
Голосование за повторное открытие вопроса, но, сказав и сделав это, ваш код не воспроизводит для меня проблему.
Даже увеличивая numOfPanels? Какую операционную систему вы используете?




«Я не публикую код, потому что считаю, что он не имеет ничего общего с кодом ...» - как вы можете сделать такое предположение, если еще не знаете причину проблемы?