使用EditingSupport为数学矩阵构造JFace TableViewer

时间:2011-02-16 19:56:05

标签: java eclipse swt rcp jface

我们的应用程序(基于Eclipse RCP,使用基于JFace / SWT的界面)需要支持编辑数学矩阵。矩阵总是方形的,可以是2x2到11x11的任何大小。此外,按钮将放置在界面上,以允许用户增大或缩小矩阵。

我们在整个代码中使用JFace TableViewers和TreeViewers来编辑非矩阵数据。如果可能的话,我想使用相同的通用结构来编辑矩阵。

我将数据保存在MySQL数据库中,每个矩阵元素使用一行,如下所示:

+----------------------+------------+------+-----+---------+-------+
| Field                | Type       | Null | Key | Default | Extra |
+----------------------+------------+------+-----+---------+-------+
| id                   | bigint(20) | NO   | PRI | NULL    |       |
| rowNum               | bigint(20) | NO   |     | NULL    |       |
| columnNum            | bigint(20) | NO   |     | NULL    |       |
| value                | double     | NO   |     | NULL    |       |
| matrix_id            | bigint(20) | NO   | MUL | NULL    |       |
+----------------------+------------+------+-----+---------+-------+

我遇到的问题是JFace“输入”似乎对应于渲染表中的单个表行。在我的例子中,单个数据库行对应于表中的单元格,而不是整行。

我唯一能想到的是以某种方式在幕后存储一个保持矩阵状态的对象,并有效地将数据库行转换为适当的JFace-able模型。 (例如,如果我有一个3x3矩阵,将九行传入代理对象并让它用一个三乘三的数组调用viewer.setInput(Object)。这似乎是一个支持的噩梦,因为我会需要保持此对象与内部模型和数据库同步。

这里有没有人有这方面的经验,可以给我一些建议吗?

1 个答案:

答案 0 :(得分:1)

超过一周后没有答案,所以我最终在这一个上滚动。我创建了一个有效地作为JFace表的输入的类,它将矩阵的行和列转换为List<List<Double>>;然后让ContentProvider,LabelProvider和EditingSupport使用它。我还可以添加“增加大小”和“减小大小”按钮,以允许用户根据需要增大或缩小矩阵。