我们的应用程序(基于 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 模型。 (例如,如果我有一个 3x3 矩阵,将九行传入代理对象并让它调用 viewer.setInput(Object)
一个三乘三的数组。这似乎是一场噩梦支持,因为我需要使这个对象与内部模型和数据库保持同步。
这里有没有人有过这种事情的经验,可以给我一些建议吗?
最佳答案
一个多星期后仍然没有答案,所以我最终决定自己解决这个问题。我制作了一个有效地用作 JFace 表输入的类,该表将矩阵的行和列转换为 List<List<Double>>
。 ;然后让 ContentProvider、LabelProvider 和 EditingSupport 与之配合使用。我还能够添加“增加大小”和“减小大小”按钮,以允许用户根据需要扩大或缩小矩阵。
关于java - 使用数学矩阵的 EditingSupport 构建 JFace TableViewer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021436/