2012-07-05 28 views
4

我必须写:jframe.getContentPane()。add(button);java中的JFrame jframe.add(button);

但我发现,它也可以当我只写

jframe.add(按钮);

这两种方法有什么区别?是否有利于编写JFrame.getContentPane()。add(button); ?

+0

请花一点时间浏览[Java文档](http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel。html#contentpane):-) – 2012-07-05 18:34:28

回答

3

这是一个味道的问题。我一直使用的getContentPane()。添加(..),因为我认为这是更容易阅读/知道实际发生的

+0

+1,对我来说是真的,因为两者意味着相同的东西,因为无论你写什么,这两个语句都会将所述'JComponent'添加到'Content Pane'的'CENTER'中'JFrame' :-) – 2012-07-05 18:23:36

+0

@HovercraftFullOfEels我搞混了什么是“后者”我纠正了我的帖子。 TX! – ControlAltDel 2012-07-05 18:27:19

+0

但是什么是差异? – 2012-07-05 18:29:58

1

所以,你应该知道的元素,如JButtonJTextArea等应加入Container和你方法:

getContentPane() 

返回该帧的Container对象。所以这两种方法的工作原理相同,但应该使用第二种方法

在这种情况下,如果你将有很大的应用许多元素第一种方法是少可读和第二通常建议。

差别不是:

Jframe.add() - 指定组件追加到这个容器的端部。这是为Container.addImpl提供便利方法的 。

+0

但jframe.add(button)之间有什么不同?和JFrame.getContentPane()。add(button); – 2012-07-05 18:30:57

+0

检查更新的答案。 – Sajmon 2012-07-05 18:33:54

2

试试这个........

的Java 1.5到来之前,jframe.getContentPane()。添加(按钮)使用.....并且那是合法的方式做到这一点....

但是,然后从Java 1.5及以上,包括myframe.add(按钮)...作为其中一个合法的方式做它..它就像, 使用Classname访问静态变量是这样做的合法方式......但仍然可以使用类实例访问静态变量...

+1

以下链接来自[Java Doc](http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html#contentpane),它更详细地描述了整个事情:-) – 2012-07-05 18:30:59

+0

谢谢不管怎样,但我只希望你同意我的回答,或者我需要以某种方式编辑它。 – 2012-07-05 18:33:09

+0

纯粹的,我同意你的回答,虽然字符串仍然附有两个术语的用法,这就是为什么相关链接,如@HovercraftFullOfEels所解释的,在其中一个评论中,虽然之后删除:-)即使我自己也不确定,因为使用哪个版本,因为从未使用过Java 1.5:( – 2012-07-05 18:38:26

1

class javadoc of JFrame是这个

JFrame类相当清楚的是帧略有不符。像所有其他JFC/Swing顶级容器一样,JFrame包含一个JRootPane作为其唯一的孩子。通常,根窗格提供的内容窗格应包含JFrame显示的所有非菜单组件。这与AWT框架案例不同。作为方便添加及其变体,必要时,remove和setLayout已被覆盖以转发到contentPane。这意味着你可以这样写:

frame.add(child); 

那孩子将被添加到contentPane。