我们的应用程序(基于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)
。这似乎是一个支持的噩梦,因为我会需要保持此对象与内部模型和数据库同步。
这里有没有人有这方面的经验,可以给我一些建议吗?
答案 0 :(得分:1)
超过一周后没有答案,所以我最终在这一个上滚动。我创建了一个有效地作为JFace表的输入的类,它将矩阵的行和列转换为List<List<Double>>
;然后让ContentProvider,LabelProvider和EditingSupport使用它。我还可以添加“增加大小”和“减小大小”按钮,以允许用户根据需要增大或缩小矩阵。