将 MVC 模型与 Swing 应用程序框架结合使用
我正在尝试使用 Swing 应用程序框架和 MVC 模型创建一个简单的 Java 桌面应用程序,但我在某些领域遇到了困难,因为缺乏好的示例(我找到的唯一 SAF 示例除了 MVC 之外什么都没有!) 。
我设法从组件中触发事件,但除此之外,我很难将 MVC 模型与 SAF 结合使用。任何地方都有例子吗?
例如,我在查看器中触发一个事件(用 @Action 映射),并将其发送到控制器。但我应该使用哪个功能呢?我的 AbstractController 扩展了 PropertyChangeListener。
如何使用 SAF 进行双向绑定(模型 -> 控制器和视图 -> 控制器)?
I'm trying to create a simple Java desktop application using the Swing Application Framework and the MVC model but I'm struggling on some areas because there is a lack of good examples (the only SAF examples I have found are anything but MVC!).
I manage to fire events from components, but apart from that I struggle to use the MVC model with SAF. Are there any examples anywhere?
For instance, I fire an event (mapped with @Action) in the Viewer which sends it to the controller. But which function should I use? My AbstractController extends PropertyChangeListener.
How do I do the binding with SAF to both directions (model -> controller and view -> controller)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我可以推荐这篇文章:Swing 架构概述。
例如,当使用 JTable(视图)时,您可以通过扩展 AbstractTableModel 创建模型,并通过操作和侦听器处理用户事件。
用户可以在 JTextField 中写入一些文本,然后将操作绑定到“Add”-JButton。您的操作实现了actionPerformed(),您可以在模型中调用添加方法来添加文本。在 Add 方法中,您保存数据,然后调用 fireTableRowsInserted(),视图将被更新。
默认情况下,Swing 组件通常包含一个模型和一个视图。
编辑: 抱歉,不了解 Swing 应用程序框架。我的回答只是针对 Swing。
I can recommend this article: A Swing Architecture Overview.
In example, when using JTable (view), you create a model by extending AbstractTableModel, and you handle user-events by Actions and listeners.
A user could write some text in a JTextField, and you bind an Action to an "Add"-JButton. Your Action implement actionPerformed() where you can call an Add-method in the model to add the text. In the Add-method you save the data and then calls fireTableRowsInserted(), and the view will be updated.
Swing components contains often a model and a view by default.
EDIT: Sorry, didn't know about Swing Application Framework. My answer was just addressing Swing.