Почему бы мне не вызвать setVisible (true) перед добавлением компонентов?
Я видел, как это написано на этом сайте несколько раз (например, здесь и здесь), что вы не должны вызывать setVisible(true)
перед добавлением компонентов к JComponent
, но я не видел объяснения, и информация в интернете кажется скудной.
2 ответа:
Вы ничего не нарушаете, если сначала вызываете его, но вам, вероятно, придется вызвать его снова, если вы что-то добавили. Иначе Swing не будет отображать добавленные компоненты. Вам нужно, чтобы JVM вызывал метод JFrame
paint(...)
, чтобы компоненты JFrame были отрисованы, иsetVisible(true)
попросит JVM сделать именно это. Если вы когда-либо добавляли компоненты после вызова setVisible(true) и не видели компонентов, вы обнаружите, что они "материализуются", если вы измените размер JFrame. Это потому что изменение размера приводит к тому, что операционная система просит Swing перерисовать графический интерфейс, и это приведет к вызовуpaint(...)
.Обратите внимание, что если вы добавляете компонент после создания графического интерфейса, вы можете вызвать
revalidate()
и частоrepaint()
на его контейнере, чтобы получить новый компонент, выложенный правильно, а затем визуализированный.repaint()
будетопределенно необходимо, если изменение компонентов включает удаление или компонент рисуется там, где другой компонент был визуализирован ранее.Книга предположение, что я очень рекомендую: грязные богатые клиенты покупают Гая и Хаасе. Просто купите его! Вы не пожалеете о покупке.