Почему фреймы и JFrames по умолчанию установлены невидимыми? - PullRequest
1 голос
/ 10 декабря 2010

Кто-нибудь знает, как рационально для Java-фреймов и JFrames устанавливать по умолчанию невидимые?

т.е. вам нужно вызвать myFrameObject.setVisible (true), или вы в конечном итоге получите невидимый интерфейс приложения.

Это меня беспокоило, так как вы не видите этого на других языках, таких как C # или Objective-C.Мне было интересно, если это было задумано, чтобы сэкономить время или у архитекторов Java просто плохой день.

Знание этого поможет мне понять окончательный ответ на жизнь, вселенную и все остальное.

Ответы [ 2 ]

6 голосов
/ 10 декабря 2010

Я всегда предполагал, что это так, чтобы вы могли заполнить окно перед его отображением. В противном случае вы можете увидеть, как куча элементов управления перемешиваются по мере их добавления. Вероятно, не существенная проблема с современными машинами + JIT, но в первые дни Java с более медленными машинами и интерпретаторами байт-кода в JVM это могло иметь значение.

Он также имитирует работу окон верхнего уровня в X11: вы создаете окно, а затем «отображаете» его (делаете его видимым).

1 голос
/ 10 декабря 2010

Помните, компоненты Swing не являются реальными компонентами с точки зрения ОС. Каждый компонент Swing должен быть «реализован». Это делается путем вызова методов pack () или setVisible (). Только в это время компонент Swing будет сопоставлен с равноправным компонентом ОС.

И помните, что когда вы добавляете компоненты в видимый графический интерфейс, компоненты все равно не появятся, потому что вам нужно вызвать менеджер компоновки для компоновки всех компонентов. Таким образом, даже если рамка была видна автоматически, в этом случае вам все равно нужно будет вызвать frame.validate (), чтобы убедиться, что компоненты расположены правильно.

Я думаю, что лучше добавить все компоненты, а затем сделать их видимыми, когда вы закончите добавлять все в кадр. Таким образом, вы размещаете компоненты только один раз, а не после добавления каждого компонента. Может быть, с другими языками, которые используют абсолютные размеры и позиционирование, это не имеет большого значения, потому что у них нет концепции менеджеров компоновки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...