Построение JFace TableViewer с EditingSupport для математической матрицы - PullRequest
3 голосов
/ 16 февраля 2011

Наше приложение (на основе Eclipse RCP, с использованием интерфейса на основе JFace / SWT) должно поддерживать редактирование математических матриц.Матрицы всегда квадратные и могут быть любого размера от 2х2 до 11х11.Кроме того, на интерфейсе будут размещены кнопки, позволяющие пользователю увеличивать или уменьшать матрицу.

Мы используем 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) с массивом три на три. Это кажется кошмаром для поддержки, так как мне нужно будетсинхронизируйте этот объект как с внутренней моделью, так и с базой данных.

Есть ли у кого-нибудь опыт работы с подобными вещами и, возможно, могли бы дать мне несколько советов?

1 Ответ

1 голос
/ 24 февраля 2011

Ответов больше чем через неделю, поэтому я закончил кататься на этом. Я создал класс, который эффективно служил входом для таблицы JFace, которая преобразовывала строки и столбцы матрицы в List<List<Double>>; затем заставил ContentProvider, LabelProvider и EditingSupport работать с этим. Мне также удалось добавить кнопки «Увеличить размер» и «Уменьшить размер», чтобы пользователь мог увеличивать или уменьшать матрицу по мере необходимости.

...