2010-07-01 81 views
5

我正在寻找关于使用Java Swing进行结构化的应用程序的最佳实践的一些指导。我通常是一个Web应用程序的人,并试图遵循MVC。 MVC是典型的Swing应用程序吗?如果是这样,怎么样?Java Swing程序结构

回答

3

以下MVC是一个非常好的主意。据我所知,没有正式的Java Swing框架在做这件事,它们都专注于问题的“视图”方面。

就应用程序结构和MVC而言 - 我知道的最好的框架是Griffon。它不是Java - 它是Groovy,但它使它更具吸引力并且非常容易学习。 Griffon到Swing应用程序与Grails到web应用程序相同。

瞧瞧吧http://griffon.codehaus.org/

+1

其实这些日子里Griffon比Groovy更Java(至少在它的实现中)。它可以让你用Groovy或Java编写应用程序,甚至同时编写一个应用程序。 – aalmiray 2011-12-03 19:50:47

+0

我实际上正在等待Scala的全面支持(代码生成)。那真的很好。我以为你正在做这样的事情:) – 2011-12-04 17:49:55

+0

它已经在那里。安装scala原型并开始商业运作。 '兀安装-原型的http:// svn.codehaus.org /兀/原型/阶/中继/阶/阶-兀-archetype.zip' '兀创建应用内样品-archetype = scala' 请注意,小程序模式尚未得到支持。你会发现你可以用Scala编写任何Griffon工件(Model,View,Controller,Service)。你甚至可以在视图中使用scala-swing。 – aalmiray 2011-12-04 19:17:08

0

摆有一个MVC架构的比较好的设置,但实际上它结合了视图和控制器。 Swing中的组件可以将监听器附加到它们(控制器方面),然后从这些监听器(这些组件内)中可以相应地修改视图和模型。所以为了回答你的问题,是的,Swing会帮助用于Java应用程序的MVC方法。

在Swing中,您仍然有两个单独的VC:组件和侦听器。我说他们合并的原因是因为每个组件都可以有它自己的各自的监听器。这些听众通常会进行操作,并且是控制器方面。这些组件不仅可以在屏幕上查看,还可以将信息传递给这些听众。按钮按压,击键,焦点改变,窗口关闭等都由组件向相应组件的收听者报告。下面是一个简单的代码片段,其中包含一个动作监听器,它注册一个按钮。

ActionListener buttonListener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     // Controller code 
    } 
}; 

JButton button = new JButton("A Button"); 
button.addActionListener(buttonListener); 

ActionListener基本上是控制器,但它取决于button以从用户接收输入。这就是摆动muddles从纯MVC观点来看视图和控制器之间的差异,但在同一时间,该区别是仍然存在:

监听控制器(减去直接解释输入)
组件视图(可译为输入,并将其传递给控制器​​)​​

希望帮助:)

+0

我不认为听众是控制器。它们可以简单地用于控制器来响应组件事件。 – 2010-07-01 20:47:07

+0

这就是我的意思。在MVC方面,他们不是,但他们可以这样想。控制器接受输入并修改模型。听众可能不一定会接受输入,但他们当然可以用来操纵模型,并且像MVC的一些解释一样,修改视图。这一切都取决于你希望增加哪些部分的控制者责任。 – peppertherj 2010-07-01 21:05:58

0

有一个JSR(296),它描述了一个框架构建Swing GUI的,但它看起来像它已经忘记了,但看看下面的文章:

http://java.dzone.com/news/jsr-296-end-jframe

我也发现以下框架,最初是基于关闭它,它看好:

想知道这些如何在实践中解决。希望他们帮助。

+0

还有这个(但它看起来休眠) - http://github.com/hamnis/SAFF – Jon 2010-07-02 02:00:03