Java Swing程序结构

Java Swing程序结构,java,model-view-controller,swing,Java,Model View Controller,Swing,我正在寻找一些关于使用JavaSwing构建应用程序最佳实践的指导。我通常是一个webapp的家伙,并尝试跟随MVC。MVC是典型的Swing应用程序吗?如果是这样,怎么做?遵循MVC是一个非常好的主意。据我所知,还没有正式的JavaSwing框架可以做到这一点,它们都专注于问题的“视图”方面 就应用程序结构和MVC而言,我知道最好的框架是Griffon。它不是Java——它是Groovy,但这正是它更吸引人、更易于学习的原因。Griffon对Swing应用程序的作用与Grails对web应用程

我正在寻找一些关于使用JavaSwing构建应用程序最佳实践的指导。我通常是一个webapp的家伙,并尝试跟随MVC。MVC是典型的Swing应用程序吗?如果是这样,怎么做?

遵循MVC是一个非常好的主意。据我所知,还没有正式的JavaSwing框架可以做到这一点,它们都专注于问题的“视图”方面

就应用程序结构和MVC而言,我知道最好的框架是Griffon。它不是Java——它是Groovy,但这正是它更吸引人、更易于学习的原因。Griffon对Swing应用程序的作用与Grails对web应用程序的作用相同


查看

Swing的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
本质上是控制器,但它依赖于
按钮
来接收用户的输入。这就是Swing从纯MVC的角度混淆视图和控制器之间的区别的地方,但同时,区别仍然存在:

监听器是控制器(减去直接解释输入)
组件是视图(但解释输入并将其传递给控制器)


希望对您有所帮助:)

您可能会发现这个非常简单的方法很有帮助。

有一个JSR(296)描述了构建Swing GUI的框架,但它似乎已经被遗忘了,请查看以下文章:

我确实发现以下框架,最初基于它,看起来很有希望:

  • 内脏归-
  • BSAF-

我很想知道这些在实践中是如何运作的。希望他们能有所帮助。

我不认为听众是控制者。它们只是可以在控制器中用于响应组件事件。这就是我的意思。就MVC而言,它们不是,但可以用这种方式来考虑。控制器接受输入并修改模型。监听器可能不一定接受输入,但它们肯定可以用来操纵模型,就像对MVC的一些解释一样,修改视图。这完全取决于您希望增加控制器责任的哪一部分。还有一点(但它看起来处于休眠状态)——事实上,现在Griffon更像是Java而不是Groovy(至少在其实现方面)。它允许您使用Groovy或Java编写应用程序,甚至可以同时使用两者。那太好了。我以为你在做这样的事情:)它已经在那里了。安装scala原型,您就可以开始工作了<代码>griffon安装原型http://svn.codehaus.org/griffon/archetypes/scala/trunk/scala/scala-griffon-archetype.zip
griffon创建应用程序示例-archetype=scala
注意小程序模式还不受支持。您会发现您可以使用Scala编写任何griffon工件(模型、视图、控制器、服务)。您甚至可以在视图中使用scala swing。我放弃了对SO注释应用格式的尝试。这太糟糕了。这是个好消息!