【问题标题】:Organizing a java GUI组织 java GUI
【发布时间】:2013-04-06 17:15:33
【问题描述】:

我是 GUI 的新手,我想了解如何正确构建我的程序。

我希望为 MVC 模型创建一个 GUI(所有控制方法都已实现)。假设我需要 3 个单独的窗口,其中某些按钮关闭一个窗口并打开另一个窗口。

我正在考虑开设 3 个班级,每个窗口一个班级。每个窗口都是一个 JFrame。这合理吗?然后,我们需要放入动作监听器。那些会去哪里?我在想应该有另一个类,主要方法。该类还可以具有所有动作侦听器,因为该类还创建了控件并能够调用控件的方法。这是一个很好的方法吗?

无论您的建议是什么,您能否提供一个关于这在代码方面的外观的想法?我知道如何将组件放在一个框架中,并在该框架中添加一个侦听器,以便按钮执行某些操作。但我不确定这在多个窗口中会是什么样子。任何小例子都可以。谢谢。

【问题讨论】:

  • 我认为JavaFx 会是一个有趣的swing 替代品,你有选择吗?
  • 不,我只能为这个挥杆。不过我已经对swing有点熟悉了,这样就比较容易了。

标签: java swing model-view-controller user-interface windowbuilder


【解决方案1】:

我建议您不要使用交换 JFrame,因为这对用户来说非常烦人——您目前使用多少应用程序会依次向您抛出一堆窗口?而是考虑在需要的地方明智地使用对话窗口,例如,程序必须停止,直到用户以某种方式(例如登录)与其交互,但主要是您交换 views(通常是 JPanels)使用卡片布局。您的 Swing GUI 类应该面向创建 JPanel,这将更好地实现这种灵活性。

是的,您的 GUI 代码的主要独立部分应该位于不同的类中。

此外,我强烈建议不要使用 GUI 构建器实用程序来创建 Swing 应用程序,直到程序员对 Swing 基础知识掌握得很好。

Swing MVC 的简单示例,请看这里:using-a-jfilechooser-with-swing-gui-classes-and-listeners

【讨论】:

    【解决方案2】:

    请注意,每个JFrame 都有自己的任务栏条目(我认为)。如果您想避免这种情况和/或需要模态窗口,请考虑 JDialog

    组织在多个地方使用的操作的一种方法是创建一个单例哈希(作为它自己的类或上下文类)来存储它们。使用Action 类而不是ActionListener 来实现这一点 -将其传递给JButton 的构造函数。

    你的程序可能是这样的:

    1. 创建 ShowViewFooAction 并添加到 ActionHash
    2. 创建 ShowViewBarAction 并添加到 ActionHash
    3. 创建 ShowViewBazAction 并添加到 ActionHash
    4. 创建 ViewFoo
      1. 使用 ActionHash 中的 ShowViewBarAction 创建 ShowViewBarButton
      2. 使用来自 ActionHash 的 ShowViewBazAction 创建 ShowViewBazAction
    5. 创建 ViewBar ...
    6. 创建 ViewBaz ...

    关于一般的 Swing 代码结构,请查看 JGoodies Binding。他们在1.5.0 版本中有教程/示例代码(它很旧,但仍然是一个很好的例子)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      相关资源
      最近更新 更多