将元素添加到JFrame而不是Container之间有什么区别?

时间:2013-10-03 19:18:36

标签: java swing jframe containers

代码是:

JFrame jframe = new JFrame("no difference");
JButton button = new JButton("no difference");
jframe.getContentPane().add(button); 
// the same result occurs for
jframe.add(button);

getContentPane会返回Container个对象。如果它与JFrame的工作方式相同,那么向Container添加按钮有什么意义呢?如果我们可以执行jframe.getContentPane().add(button);

,为什么还要编码jframe.add(button);

3 个答案:

答案 0 :(得分:3)

来自JFrame javadoc

  

作为一种契约add及其变体,removesetLayout已经存在   在必要时被覆盖以转发到contentPane

这意味着通过JFrame.getContentPane().add()添加组件毫无意义,因为JFrame.add()会这样做。

我建议你看看这篇解释内容窗格以及如何处理它的文章:ContentPane (or Content Pain?)

答案 1 :(得分:2)

  

将元素添加到JFrame而不是Container?

之间有什么区别?

其他答案涵盖了问题的实际核心,以及为什么在您声明的情况下效果是相同的。所以我会添加另一个区别。通用性。

JFrame(作为顶级容器)无法添加到其他任何内容中,而后者(作为简单容器)可以添加到以下内容中:

  • JFrame
  • JApplet
  • JWindow
  • JDialog
  • JScrollPane
  • JTabbedPane
  • 的标签
  • JSplitPane
  • 的一个区域
  • 另一个面板中布局的单个区域。
  • ...

答案 2 :(得分:0)

由于javax.swing.JFramejava.awt.Container的子类,因此jframe.add(button)实际上会从add()调用Container。这就是为什么一样。