2013-07-11 31 views
0

我一直在广泛阅读论坛,并尝试了多种方法来解决这个问题。更新JTable数据 - 使用AbstractTableModel

问题: 我做了一个自定义AbstractTableModel,所以我可以控制我的数据显示方式。它只是存储在一个String[][]。它使用JDBC连接到数据库以填充初始数据。因此,当我的用户(通过Swing GUI)搜索某个内容时,我只需构建一个查询来查询数据库,并返回ResultSet。现在,我想在JTable上显示这个新数据。

研究: 我读了很多关于听众和解雇更新和事情。但我已阅读并重新阅读,但仍未完全理解它们。当我为JTable设置一个新模型时,实际上我想保留我创建的自定义AbstractTableModel并只是更新数据,这是可能的(可能使用AbstractTableModel类中的公共方法创建)?

附加问题:我应该使用此功能的侦听程序吗?我需要添加听众还是观察者?

谢谢,我真的很感激它! Rich

回答

1

研究:我读了很多关于听众和解雇更新和事情。 但我已阅读并重新阅读,但仍未完全理解 他们。当我为JTable设置一个新模型时,我实际上想要保留我创建的自定义AbstractTableModel并更新数据,是否可以使用这个 (可以使用我可以创建的AbstractTableModel类 中的公共方法)?

是的,这是可能的。基本上,你需要或者......

  1. 在您的自定义表格模型提供的功能来添加和删除行或
  2. 使用新的数据
构建自定义表格模型的新实例

附加问题:我是否应该使用这个 功能的侦听器?我需要添加听众还是观察者?

没有上下文很难说。我会说,一般不会。在你的情况下,创建一个SwingWorker可能更简单,执行数据库查询并填充新表模型并从doInBackground方法返回它或使用publish/process方法更新现有模型。

+0

非常感谢。您的列表使我在处理表格时的两个选项变得有意义。我解决了它。 –

0

....所以我可以控制我的数据显示

方式的模型被用来存储数据。视图(JTable)显示数据。

它只存储在String [] []中。

没有必要创建自定义TableModel。只需使用DefaultTableModel即可。

其实我是想保持我的自定义AbstractTableModel上

使用的的DefaultTableModel

setDataVector()方法见Table From Database ExampleGet the Code部分。

+0

我想保留我的AbstractTableModel的原因是因为我有一排复选框。这个函数不是由DefaultTableModel提供的。那么你会如何推荐我用这个来处理更新表格的行? –

+0

@RichieEpiscopo,是的,使用DefaultTableModel时,您可以在JTable中显示一行复选框。我再次强调模型存储数据,表格呈现数据。您将布尔值存储在模型中,然后重写'getColumnClass()'方法以返回适当的类,并且该表将使用适当的渲染器/编辑器。 – camickr

+0

谢谢你的帮助。你也为我解决了一些问题。我现在开始工作了! –