关于Java中的GUI?

时间:2012-01-06 19:50:51

标签: java swing layout

我正在尝试用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);

2 个答案:

答案 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)

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

第三部分调用getContentPane JFrame,这是{{1}}的一种方法,所以它很可能是从该类继承的。

如果你编辑你的问题以发布示例代码的周围环境(或链接到它),我(或者比我更熟悉Swing的人)可能能够更详细地解释它是如何工作的。< / p>