在Java应用中使用MVC


10

我需要编写一个跨平台的GUI应用程序来处理(在多个线程中)并可视化大量数据。理想情况下,应用程序应该相对较快并且外观良好。

该应用程序的界面将包括一个表格小部件,一个树状小部件和一个自定义图形绘制小部件。用户将能够从这些小部件中的任何一个修改数据,并且更改应立即反映在其他小部件中。

自然,我计划使用MVC。但是,我通常使用C ++ / Qt进行所有GUI编程,并且接触Java的机会非常有限。因此,我非常感谢有关如何在Java中组织此类应用程序的任何建议。特别是我应该使用Swing还是JavaFX?您会为工作选择哪些小部件?您能推荐涵盖Java平台这些方面的任何书籍/在线教程吗?

我将不胜感激任何反馈。谢谢!

(此问题最初发布在Stack Overflow上,但建议将该站点建议为一个更合适的位置)

Answers:


21

这都是非常主观的,因为多种不同的技术将能够满足您的需求。

像其他人一样,我可能只会推荐我个人更喜欢这种项目的技术,那就是JavaFX

我推荐JavaFX的原因是:

好的,我想以上内容有点切线,但是我想推广JavaFX ;-)

无论如何,要解决您问题中的特定要点:

  • JavaFX是一个跨平台的GUI框架(当前为Mac / Windows / Linux)。
  • JavaFX具有内置的高质量多线程支持(核心框架本身是单线程的,就像那里的其他所有GUI平台一样,但是您可以定义自己的任务,以在GUI线程之外同时执行,以便保留GUI线程)响应)。
  • 编写良好的JavaFX程序应该不会出现性能足以可视化大量数据的问题。这是一个示例JavaFX项目
  • 通过css对应用程序进行样式设置,利用视觉效果和动画的能力,使您可以与设计师合作,使您的应用程序看起来很棒,或者如果您有技能,可以自己做。
  • JavaFX具有可以使用的TableViewTreeView。还有一个组合的TreeTable控件,已为Java 8发行版做准备。
  • 定制的图形绘制小部件可以使用场景图形形状直接绘制的画布 -这实际上只是编码风格和首选项的问题。
  • JavaFX的属性和绑定功能以及其事件侦听器框架使使用一个控件修改数据并使更改立即反映在其他控件中变得轻而易举。
  • 对于MVC样式开发,您可以使用普通的Java对象编写模型,使用FXML标记语言(如果需要,可以使用SceneBuilder图形布局工具创建)来定义视图,并可以使用Java(或者您愿意,可以使用另一种脚本语言)来定义控制逻辑。 ,此外,您应该使用CSS将样式与逻辑分开。
  • 由于您接触Java的机会有限,因此学习曲线很重要。除了我之前链接的JavaFX教程以外,还有许多出色的Java教程可以帮助您解决这一问题。JavaFX核心代码仅使用JDK中可用的功能,因此,使用JavaFX不需要学习很多其他的库和框架(例如,如果您正在学习JavaEE,则需要学习)。因此,这两个教程站点提供了您快速掌握所需的大多数信息。
  • 对于应用程序组织来说,如果您有一个复杂的应用程序,并且需要一个完整的,经过验证的客户端应用程序框架作为后盾,并且不介意做很多额外的学习,则可以将JavaFX嵌入到Eclipse RCPNetBeans RCP中。到他们的页面可以节省您数年的开发时间。我只建议您在需要的情况下考虑使用此类平台,因为对于中小型项目,如果没有复杂的客户端平台框架(例如Eclipse和NetBeans),直接在JavaFX中编写代码可能会更简单。
  • 至于您应该使用Swing还是JavaFX,我并不是回答这个问题的最客观的人。JavaFX肯定有缺点,当您开始使用它时(对于Swing来说),这些缺点将对您显而易见。
  • 对于在线教程,我已链接到最相关的教程。有一个完整的应用程序很好的教程集
  • Pro JavaFX 2》和《JavaFX 2.0示例入门》这两本书获得了很高的评价。

感谢您提供这个惊人的答案!JavaFX确实听起来像一个不错的平台,我肯定会花很多时间在它上面。加上您推荐的两本书,都可以在我的图书馆找到:)
例如,或

1
该“世界上最好的IDE”链接实际上应该仅指向IntelliJ IDEA;)好的答案,非常有用,谢谢!
库珀

1
应当指出,JavaFX当前不提供任何可访问性支持。对于某些人(这对我来说),这可能会破坏交易,并且必须继续使用Swing。
库珀

JavaFX现在提供了可访问性支持。此功能在Java 8u40中提供,为此实现了JEP 204:JavaFX可访问性
jewelsea

5

去同一个模型-视图-演示模式来代替。您可以在此处通过mvp4j项目在Swing中查看一个很好的MVP示例。

虽然不是Swing,但我还将在GWT Google Developers网站上查看MVP文章,以进一步了解这种模式以及如何在Java中应用它。无论框架如何,设计原则都是相同的,GWT与Swing非常相似。

MVP工作原理的快速细分:

  • 视图:严格包含您的GUI组件的类。不了解逻辑或模型,甚至不知道事件处理程序。这使视图非常笨拙,但非常随意且可更改。
  • Presenter:处理您的应用程序逻辑的类。演示者将绑定到一个(或多个)视图类,并处理所有必要的应用程序逻辑和模型控制。
  • 模型:您的数据模型对象。最好将它们尽可能保持类似于POJO的风格(使用纯Java对象)。

正确实施后,MVP将使您的应用程序脱钩,并允许您进行修改而不会干扰应用程序的其他区域。

编辑:根据您决定使用JavaFX的建议,我建议您查看以下文章


谢谢!我想我已经决定使用JavaFX,但是会阅读有关MVP及其在该平台上如何使用的信息。
egor 2012年

1
大!如果您决定使用MVP模式,则以下链接提供了JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
库珀(Cooper)

2

您需要的小部件可以在SwingSWT中找到。该文档包含组件(Swing)或小部件(SWT)的示例,因此很容易识别它们。

Swing是JDK中包含的GUI库,它是从头开始构建的。SWT是一个外部组件,其组件基于本地组件。

至于MVC,他们俩都有支持。在Swing中,每个组件都有一个模型,该模型实际上提供了基础数据。组件本身既是视图又是控制器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.