Java в интерфейсе repaint () проблема? - PullRequest
7 голосов
/ 16 декабря 2008

У меня есть JFrame. Этот JFrame содержит JButton. Я нажимаю кнопку JButton, и создаются 10 полей JTextField.

проблема: Я не вижу их до тех пор, пока "я не вызову repaint ()", изменив размер окна. Только тогда я вижу созданные JTextFields.

КОД:

JPanel points = new JPanel();

//Creating the JTextFields:
for (int i=0; i<10; i++) {
    JTextField textField = new JTextField();
    points.add(textField);
}

repaint();
this.repaint();
super.repaint();
points.repaint();

СПАСИБО - после цикла for я просто вызвал points.validate () и все заработало ...

1 Ответ

15 голосов
/ 16 декабря 2008

Container.add Документы API говорят:

Примечание. Если компонент был добавлен в контейнер, который был отображен, проверка должна быть вызвана на этом контейнер для отображения нового составная часть. Если несколько компонентов будучи добавленным, вы можете улучшить эффективность путем вызова только для проверки один раз, после того, как все компоненты имеют было добавлено.

Это неясно и не очень умно, но это правила. Может быть лучше позвонить JComponent.revalidate

...