【问题标题】:About GUI in Java?关于 Java 中的 GUI?
【发布时间】:2012-02-04 12:33:08
【问题描述】:

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

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);

【问题讨论】:

标签: java swing layout


【解决方案1】:

您看到的差异更多地与 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 分离。有时分析最佳的面向对象结构可能代价高昂,在这种情况下,可能会发布具有许多“对象外部”影响的代码。

【讨论】:

    【解决方案2】:

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

    第三部分调用getContentPane,这是JFrame的一个方法,所以很可能继承自那个类。

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

    【讨论】:

    • 谢谢!我必须做更多的研究才能更好地理解它。我只是对在 Java 中创建 GUI 的所有不同方法感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2013-04-30
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多