Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将元素添加到JFrame与容器之间有什么区别?_Java_Swing_Jframe_Containers - Fatal编程技术网

Java 将元素添加到JFrame与容器之间有什么区别?

Java 将元素添加到JFrame与容器之间有什么区别?,java,swing,jframe,containers,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返回一个容器对象。如果按钮与JFrame同样适用,那么将其添加到容器中有什么意义?为什么要费心编写j

代码是:

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
返回一个
容器
对象。如果按钮与JFrame同样适用,那么将其添加到容器中有什么意义?为什么要费心编写
jframe.getContentPane().add(按钮)如果我们可以做
jframe.add(按钮)javax.swing.JFrame
java.awt.Container
的子类,所以
JFrame.add(按钮)
实际上从
容器中调用
add()
。这就是为什么它是相同的。

因为
javax.swing.JFrame
java.awt.Container
的子类,所以
JFrame.add(按钮)
实际上从
容器中调用
add()
。这就是为什么它是一样的。

来自

作为一种惯例,
add
及其变体,
remove
setLayout
已经 根据需要重写以转发到
contentPane

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

我建议您看看这篇文章,它解释了内容窗格以及如何处理它:

来自

作为一种惯例,
add
及其变体,
remove
setLayout
已经 根据需要重写以转发到
contentPane

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

我建议您看看这篇文章,它解释了内容窗格以及如何处理它:

将元素添加到JFrame与容器之间有什么区别

其他答案涵盖了问题的实际核心,即为什么在你陈述的情况下效果是相同的。因此,我将添加另一个差异。多才多艺

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

  • JFrame
  • JApplet
  • JWindow
  • JDialog
  • JScrollPane
  • JTabbedPane的选项卡
  • JSplitPane的一个区域
  • 另一个面板中布局的单个区域
将元素添加到JFrame与容器之间有什么区别

其他答案涵盖了问题的实际核心,即为什么在你陈述的情况下效果是相同的。因此,我将添加另一个差异。多才多艺

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

  • JFrame
  • JApplet
  • JWindow
  • JDialog
  • JScrollPane
  • JTabbedPane的选项卡
  • JSplitPane的一个区域
  • 另一个面板中布局的单个区域

你应该考虑读取框架是.jFr.Adt(Button)不等价,因为什么原因我从来都不知道。但是JFrame有几个相关的容器,ContentPane是一个(通常)需要按钮的容器。所以你需要把它放在内容窗格中,你必须明确地做它,现在他们用JFrice本身上的Add方法使它变得更方便。你应该考虑读取框架是.jFr.Add(Button)不等价,因为我从来不知道的原因。但是JFrame有几个相关的容器,ContentPane是一个(通常)需要按钮的容器。因此,您需要将它放在内容窗格中,您以前必须显式地执行此操作,现在他们已经通过JFrame本身上的add方法使其更加方便。不,它不使用基类中的
add
。它将
add
委托给它唯一的子组件,即
JRootPane
。之前,此委派必须使用
getContentPane()
手动完成,但从1.5开始,此委派是自动完成的。请参见否,它不使用基类中的
add
。它将
add
委托给它唯一的子组件,即
JRootPane
。之前,此委派必须使用
getContentPane()
手动完成,但从1.5开始,此委派是自动完成的。请参阅@vopros-voprosovich:Use以查看包含层次结构的列表。@trashgod-DYM以使用从该线程链接的Swing Explorer中的那些快捷方式?哦我现在明白了,这不是你的意思P@voprosvoprosovich:用于查看包含层次结构的列表。@trashgod DYM使用Swing Explorer中与该线程链接的那些快捷方式?哦我现在明白了,这不是你的意思P