我正在尝试用Java学习GUI,但我有点困惑,想知道这个代码在窗口中添加组件的区别是什么?当我查看代码示例时,它变化很大,一些示例使用JPanel,只需通过编写:panel.add(something);有些代码只使用add(something);或contentPane.add(某事物);我只是好奇。谢谢!
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 :(得分: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();
}
}
有时,方法希望在不同的对象上调用方法。在这种情况下,您有一个变量持有对“other”对象的引用,当您在该对象上调用该方法时,您必须取消引用该名称引用,一个示例可能如下所示:
public Class MyOtherClass {
public void doTheOtherThing(MyClass myClass) {
myClass.doThis();
}
}
不同的示例以不同的方式进行Swing编程。一些示例往往比其他示例更面向对象。为了说明,如果你需要一个“特殊”按钮,一个例子可以子类化按钮并在子类中适当地配置它,而另一个例子可能构造一个非子类按钮并从'JButton'类之外配置它。
良好的面向对象编程有利于子类化作为外部配置的解决方案。这是因为配置按钮的代码成为新按钮子类的一部分,因此当通过程序将Button移动到不同的位置时,配置代码不会意外地与Button分离。有时分析最佳的面向对象结构可能代价高昂,在这种情况下,可能会发布具有大量“对象外部”影响的代码。
答案 1 :(得分:0)
区别在于代码所在的位置。第二部分代码只在具有setLayout
和add
方法的类的方法中有意义;这很可能是因为该类是一个自定义的GUI组件,它继承自JPanel
或另一个Container
。
第三部分调用getContentPane
JFrame
,这是{{1}}的一种方法,所以它很可能是从该类继承的。
如果你编辑你的问题以发布示例代码的周围环境(或链接到它),我(或者比我更熟悉Swing的人)可能能够更详细地解释它是如何工作的。< / p>