代码是:
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);
答案 0 :(得分:3)
作为一种契约
add
及其变体,remove
和setLayout
已经存在 在必要时被覆盖以转发到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.JFrame
是java.awt.Container
的子类,因此jframe.add(button)
实际上会从add()
调用Container
。这就是为什么一样。