1

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

Я видел несколько способов сделать теизм, который, кажется, они оба работают, но мне просто интересно, лучше ли один практиковать над другим. Например, сJFrame называетсяmyFrame Вы могли бы сделать: myFrame.add(new JButton("OK"));И вы также ...

3 ответа

2

От Java5 не требуется

  • 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

5

Буквальная копия из класса JavadocJFrame

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();

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

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