Java数据绑定最佳实践

9
即使我不是Java的新手,但我只在学校/大学环境中使用过它,所以我不知道企业中使用的所有最佳实践。
特别是我现在正在开发一个Java桌面应用程序(在UI层使用Swing),我对使用Swing组件进行数据绑定的最佳实践特别感兴趣。
例如,我可以在模型层中有一个模型对象列表,并且我需要在JTable中显示它们。然后,当选择JTable的单个行时,我需要在一些JLabels上显示与所选行对应的模型对象的一些信息。
我应该使用哪些库?应该如何最佳实践?
我正在寻找一些链接/文章/教程(/书?)来深入了解这个主题,并学习各种解决方案的优缺点。
4个回答

6
针对您提供的特定示例,我建议采取以下方法:
  1. 将您的模型对象表示为一个支持RandomAccess(例如ArrayList)的List<Model>。
  2. 子类化AbstractTableModel并覆盖getValueAt(int row, int col)以索引到您的List<Model>并检索适当的Model实例。然后返回要绑定到列col的特定属性。
一般来说,我在数据绑定方面会自己编写代码而不使用框架。对于编辑器样式面板,我通常实现三种方法:initialize(),commit()和clear(),其中initialize()接受正在编辑的域对象的实例,commit()应用任何更改并返回修改后的域对象实例,而clear()则清除所有UI组件值或将它们设置回默认值。

那么,你是说我应该创建一个小部件(例如JPanel的子类?),其中包括所有字段和控件以编辑对象,初始化(initialize())、提交(commit())和清除(clear())方法,在我的JFrame布局中添加此JPanel子类,然后根据选择事件调用各种方法? - Andrea Zilio
简而言之 - 是的。通常,如果JPanel子类是编辑器,则可能希望在模态JDialog中显示它。我通常在我的JPanel上添加一个静态工厂方法,该方法将创建一个包含面板以及OK、应用和取消按钮的JDialog。 - Adamski

1

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

为您的Swing相关开发使用整洁的UI IDE(如Netbeans)。始终选择布局。布局一开始很难设计,但一旦您开始使用它们,它们将非常有用和方便。您还需要了解Swing中的监听器和当然是Swingworkers。搜索一下Google,您会找到真正好的资源。


1
为了处理选择操作,您需要在JTable的选择模型上实现ListSelectionListener。您可以在这里这里获取一些详细信息。
一旦事件被触发,您将获得一些有关事件的数据,包括事件的source。您还将获得前导选择索引,您可以使用它来标识所选行(假设您不允许多个选择)。您将必须从您的表格模型(或其他共享模型,具体取决于您的模型设计)中收集数据对象,以获取按钮的值。

0

我不是很懂swing,但你尝试过使用模型GUI中介者模式吗?它适用于任何语言和任何GUI组件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接