2012-01-06 53 views
0

我想学习Java中的GUI,但我有点困惑,想知道这段代码在窗口中添加组件的区别是什么?当我查看代码示例时,它变化很大,一些示例使用JPanel,并通过编写添加:panel.add(something);有些代码只是使用add(something);或contentPane.add(东西);我只是好奇。谢谢!关于Java中的GUI?

JList text; 

JPanel panel = new JPanel(); 
frame.add(panel); 
panel.add(text); 

-

setLayout(new FlowLayout); 
add(text); 

-

Container contentPane; 
contentPane = getContentPane(); 
contentpane.setLayout(new FlowLayout); 
contentPane.add(text); 
+0

检出[this](http://docs.oracle.com/javase/tutorial/uiswing/) – mre 2012-01-06 20:08:09

+0

可能的重复http://stackoverflow.com/questions/2432839/what-is-the-relation-between -contentpane-and-jpanel – Andy 2012-01-06 20:08:22

回答

0

不同之处在于,其中的代码所在。代码的第二部分只有在具有setLayoutadd方法的类的方法内才有意义;很可能这是因为该类是一个自定义GUI组件,它继承自JPanel或另一个Container

第三部分调用getContentPane,这是一个方法JFrame,所以它最有可能继承该类。

如果您编辑您的问题以发布示例代码的周围上下文(或指向它的链接),我(或者比Swing更有经验的人)可能能够更详细地解释其工作原理。

+0

谢谢!我必须做更多的研究才能更好地理解它。我只是感到困惑的所有不同的方式来创建Java的GUI – 2012-01-06 20:23:10

2

您看到的差异更多地与Java语言有关,而与正在执行的实际操作关系更小。

如果调用没有指定特定对象的方法,Java语言假定您所呼叫的this对象的方法,或者你当前工作的对象。

public class MyClass { 

    public void doThis() { 
    } 

    public void doThat() { 
    // the following line will call this.doThis() 
    doThis(); 
    // this is exactly the same as the line above, except it is explicitly stated 
    this.doThis(); 
    } 

} 

有时一个方法的愿望在另一个对象上调用一个方法。在这种情况下,你有一个变量抱到了“其他”对象的引用,当你调用对象的方法,必须取消引用名称引用,一个例子可能是这样的:

public Class MyOtherClass { 

    public void doTheOtherThing(MyClass myClass) { 
    myClass.doThis(); 
    } 

} 

不同的例子做不同的Swing编程。一些例子倾向于比其他例子更加面向对象。举例来说,如果你需要一个“特殊”按钮,一个例子可能会在按钮子类中进行适当的配置,而另一个例子可能会构造一个非子类按钮并从“JButton”类之外进行配置。

良好的面向对象编程有利于子类化作为外部配置的解决方案。这是因为配置按钮的代码成为新按钮子类的一部分,所以当通过程序在体系结构中将Button移动到不同的位置时,配置代码不会意外从Button中分离出来。有时候分析最好的面向对象的结构可能代价很高,在这种情况下,人们可能会释放出大量“对象外部”影响的代码。

+0

感谢您的信息! – 2012-01-06 20:56:40