Вопрос по java, swing – Java - добавление компонентов в JFrame

1

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

Например, сJFrame называетсяmyFrame Вы могли бы сделать:

myFrame.add(new JButton("OK"));

И вы также можете сделать:

Container c = myFrame.getContentPane();
c.add(new JButton("OK"));

Является ли один из этих «правильных»?

Ваш Ответ

3   ответа
5

JFrame

The JFrame class is slightly incompatible with Frame. Like all other JFC/Swing top-level containers, a JFrame contains a JRootPane as its only child. The content pane provided by the root pane should, as a rule, contain all the non-menu components displayed by the JFrame. This is different from the AWT Frame case. As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary. This means you can write:

   frame.add(child);

And the child will be added to the contentPane. The content pane will always be non-null. Attempting to set it to null will cause the JFrame to throw an exception. The default content pane will have a BorderLayout manager set on it. Refer to RootPaneContainer for details on adding, removing and setting the LayoutManager of a JFrame.

Так что оба эквивалентны, и оба верны

1

Container c = myFrame.getContentPane();
c.add(new JButton("OK"));

Это самый практичный. Поскольку вам, скорее всего, позже потребуется использовать контейнер, который является

myFrame.getContentPane();

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

каждая ненужная буква - это шум, а шум ведет к не поддерживаемому коду :-) Хотя существуют свойства contentPane, которые доступны только напрямую (например, фон, непрозрачный ...), макетnot один из тех, так что ваш аргумент .. кашель ...
2

to add JComponents to the ContentPane, just JFrame.add(JComponent)

JFrame has implemented BorderLayout, then myFrame.add(new JButton("OK")); is placed to the CENTER area

Похожие вопросы