【问题标题】:Basic Java GUI design基本的 Java GUI 设计
【发布时间】:2011-12-29 16:03:17
【问题描述】:

在我们在课堂上使用的 GUI 书籍中,有许多关于如何用 Java 制作图形用户界面的示例。这么多例子,我很困惑当涉及到一个大型应用程序时应该使用哪一个。

所以我看过例子

  • 其中主类扩展JFrame
  • JFrame 对象是在 main 方法内创建的
  • 主类扩展JFrame AND 实现ActionEvent 接口
  • Listener 类在主类中声明

当然,我可以使用所有这些,但现在,由于我没有任何经验,我看不到使用其中任何一个的好处。实际上其中一种是正确的方法还是取决于我的情况?

谢谢!

【问题讨论】:

  • 我认为你选择的这些替代方案中的哪一个最终是不重要的正确比视图和控制器之间的绑定(应该尽可能薄和“愚蠢”)的实现方式的技术细节更重要。

标签: java swing user-interface


【解决方案1】:

“是 A”还是“有 A”?这是考虑扩展类时应该问的问题。如果新类“Is A”框架,扩展框架,但如果该类只需要一个框架的引用,不要扩展

事实上,如果需要自定义组件,扩展JComponentJPanel,然后将其添加到框架、..applet、窗口、 JInternalFrame,对话框,布局约束,拆分窗格的一部分..

听众

至于听众。与其在单个 actionPerformed() 方法中遍历一个巨大的 if/else 结构来确定所需的操作,不如采用以下任一方法更佳:

  1. 为每个需要它的控件创建一个侦听器。
  2. 创建一个AbstractAction 的实例,该实例可用于多个控件(“复制”按钮、菜单项等)。

总结

所以(通常)对于:

  1. JFrame,请勿扩展。
  2. 监听器,根据需要创建和添加。

【讨论】:

  • 您不扩展JFrame 对我来说似乎很奇怪,但是却无缘无故地扩展JPanel。 (但一定要扩展JApplet,只是不要在子类中做太多事情。)
  • @TomHawtin-tackline “无缘无故扩展 JPanel。” 我写的是什么建议?我没有明确说明何时应该首选自定义组件而不是其他创建 GUI 的方式。但我的观点是,您可能需要一个自定义组件,而不是自定义框架。对于后者,我想不出一个案例。
  • @trashgod 你的意思是PanelUI?
  • @AndrewThompson:是的;虽然通常很少。
【解决方案2】:

老实说,这取决于情况。编码时的一个基本规则是“编码到抽象类或接口”。

因此,简而言之,让一个类扩展(或实现)一个 JFrame(或任何接口或类)和/或让一个类与 ActionListener 做同样的事情。

一切都与代码的可维护性、灵活性和简洁性有关。

【讨论】:

    【解决方案3】:

    标准方法:在方法 main 中使用 EventQueue,创建主窗体。在这种情况下,您的所有操作都将是异步的

    【讨论】:

    • 当使用 Swing 时,这无论如何都会在幕后发生。我不确定手动执行此操作有什么意义,无论如何这似乎无法回答 OP 的问题
    • 你的意思是public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { methodToStartSwingGUI(); }}); }?是的,这样做。
    【解决方案4】:

    主类在其中扩展了JFrame

    • 主类不必扩展 JFrame。如果不是,您应该像使用任何其他类一样创建一个 JFrame 对象

    JFrame 对象在 main 方法中的创建位置

    • 如果 MainClass 扩展了它在 c'tor 内部创建的 JFrame(在 super() 中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      相关资源
      最近更新 更多