Java 数据绑定最佳实践

Posted

技术标签:

【中文标题】Java 数据绑定最佳实践【英文标题】:Java Data binding best practices 【发布时间】:2011-03-09 04:17:48 【问题描述】:

即使我不是 Java 新手,我也只在学校/大学环境中使用过它,所以我不了解企业中使用的所有最佳实践。

特别是我现在正在开发一个 Java 桌面应用程序(在 UI 层使用 Swing),我对与 Swing 组件进行数据绑定的最佳实践特别感兴趣。

例如,我可以在模型层有一个模型对象列表,我需要在 JTable 中显示它们。 Then, when a single row of the JTable is selected, I need to display some information regarding the model object corresponding to the selected row on some JLabels.

我应该使用哪些库?这样做的最佳做法是什么?

我正在寻找一些链接/文章/教程(/书籍?)来深入研究这个主题并了解各种解决方案的优缺点。

【问题讨论】:

【参考方案1】:

对于您给出的具体示例,我建议采用以下方法:

    将您的模型对象表示为List<Model>,其中List 实现支持RandomAccess(例如ArrayList)。 子类AbstractTableModel 并覆盖getValueAt(int row, int col) 以索引到您的List<Model> 并检索适当的Model 实例。然后返回您希望绑定到列的特定属性:col

一般来说,当涉及到数据绑定而不是使用框架时,我会自己动手。对于编辑器风格的面板,我通常实现三种方法:initialise()commit()clear(),其中initialise 采用正在编辑的域对象的实例,commit 应用任何更改并返回修改后的域对象,clear 清除所有 UI 组件值或将它们设置回默认值。

【讨论】:

那么,你是说我应该创建一个小部件(例如子类化 JPanel?),其中包括编辑对象的所有字段和控件、initialize()、commit() 和 clear( ) 方法,将此 JPanel 子类添加到我的 JFrame 布局中,然后调用各种方法以响应选择事件? 简而言之-是的。通常,如果 JPanel 子类是一个编辑器,您可能希望在模态 JDialog 中显示它。我通常在我的 JPanel 上添加一个静态工厂方法,该方法将创建一个包含面板以及 OK、Apply 和 Cancel 按钮的 JDialog。【参考方案2】:

始终让您的应用程序打开以进行扩展,并牢记耦合因素。我的意思是您应该将所有数据模型存储在单独的数据结构中,而与 UI 层(Swing 组件)无关。您应该尝试拥有一个单独的松散耦合(具有单独的数据提供程序包)数据结构,该结构将为您提供所需的所有值。一旦这个设计到位,您就可以开始担心您的 UI 绑定了。

为您的挥杆相关开发准备一个简洁的 UI IDE(如 Netbeans)。总是去layouts。布局一开始很难设计,但一旦你开始使用它们,它就会非常有用和方便。您将进一步了解 Swing 中的听众,当然还有 Swingworkers。谷歌一下,你会发现这方面的资源非常好。

【讨论】:

【参考方案3】:

要处理选择操作,您需要在 JTable 的选择模型上实现 ListSelectionListener。你可以得到一些细节here和here。

一旦事件被触发,您将获得一些关于事件的数据,包括事件的source。您还将获得领先的选择索引,您可以使用它来识别选定的行(假设您不允许多选)。您必须从表模型(或其他共享模型,具体取决于您的模型设计)中收集数据对象,以便获取按钮的值。

【讨论】:

【参考方案4】:

我对swing不是很了解,但是你试过Model gui mediator模式吗?适用于所有语言和任何 gui 组件。

【讨论】:

以上是关于Java 数据绑定最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

WPF 数据绑定和验证规则最佳实践

在应用程序中使用 jQuery 表单绑定代码的最佳实践

使用 RxSwift 将 UITableViewCell 中的控件绑定到 ViewModel 的最佳实践

应用程序设置绑定最佳实践

Android - MVVM中ViewModel状态的最佳实践?

域名绑定动态IP最佳实践