0

代码是:

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 一样好,那么将按钮添加到容器有什么意义?jframe.getContentPane().add(button);如果我们能做到,为什么还要打扰编码jframe.add(button);

4

3 回答 3

3

来自JFrame javadoc

作为一种便利add及其变体,removesetLayout已被覆盖以contentPane根据需要转发给。

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

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

于 2013-10-03T19:40:16.637 回答
2

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

其他答案已经涵盖了问题的实际核心,即为什么在您所说的情况下效果相同。因此,我将添加另一个区别。多功能性。

JFrame作为顶级容器)不能添加到其他任何东西,而后者(作为简单容器)可以添加到以下内容:

  • JFrame
  • JApplet
  • JWindow
  • JDialog
  • JScrollPane
  • 一个选项卡JTabbedPane
  • 一个区域JSplitPane
  • 另一个面板中布局的单个区域。
  • ...
于 2013-10-04T01:20:49.363 回答
0

由于javax.swing.JFrame是 的子类java.awt.Container,所以jframe.add(button)实际上是add()Container. 这就是为什么它是一样的。

于 2013-10-03T19:31:40.103 回答