SWT: извлечение содержимого диалогового окна и сохранение данных в средстве просмотра таблиц
У меня есть страница мастера, которая содержит Jface TableViewer с 5 столбцами. Страница мастера также содержит кнопки "Добавить" и "Удалить". При нажатии кнопки "Добавить" открывается новый диалог с 3 текстовыми полями и 2 комбинированными полями, и пользователь вводит в них подробности.
До этого момента все было в порядке, но я хотел бы знать, как извлечь содержимое текстовых полей и полей со списком (после того, как пользователь нажмет кнопку "ОК" в диалоговом окне) и сохранить то же содержимое в средстве просмотра таблиц моего страница мастера? Нужно ли использовать MouseListener и переопределить метод мыши вниз и записать логику в методе мыши вниз для получения содержимого? Или есть другой способ сделать это? Чтобы получить содержимое, я просто говорю, например:
TextBox txt = new TextBox(shell, SWT.BORDER);
String txtContents = txt.getText();
Каков подход для извлечения содержимого диалогового окна и сохранения данных в таблице?
И как мне удалить выбранную строку в таблице, когда пользователь нажимает кнопку "Удалить" в диалоговом окне?
2 ответа
Лучше всего было бы создать модель, которая будет хранить значения из элементов управления в диалоговом окне и управлять добавлением и удалением элементов из таблицы через список моделей, заданных в качестве входных данных для таблицы.
- Постройте модель с сеттерами и геттерами для хранения входных данных диалога. например.,
DialogModel
- В классе мастера добавьте
List<DialogModel> tableViewerEntries;
в качестве члена класса, который должен быть установлен в качестве входных данных таблицы. т.е.tableViewer.setInput(tableViewerEntries);
Когда кнопка Ok в диалоговом окне нажата, сделайте следующее:
DialogModel model = new DialogModel(); ... @Override protected void okPressed() { model.setAttribute1(text1.getText()); model.setAttribute2(combo1.getText()); // or use getItem(selectedItemIndex); ... }
Создайте открытый метод в классе диалога, который возвращает модель. сказать.,
getModel()
;Внутри слушателя выбора кнопки Добавить, сделайте
if(dialog.open == SWT.OK) { // using a getter method, get the model from the dialog. DialogModel dialogModel = dialog.getModel(); // add it to the list of models set as input to the tableViewer tableViewerEntries.add(dialogModel); // Refresh table to set the new element in the tableviewer. tableViewer.refresh(); }
Для удаления просто удалите выбранную модель из списка записей таблицы.
// remove the selected element from the list of DialogModels set as Table Input. int index = tableViewer.getTable().getSelectionIndex(); tableViewerEntries.remove(index); tableViewer.refresh();
Поставщики содержимого и меток средства просмотра таблиц должны быть соответствующим образом настроены для отображения атрибутов модели в виде значений ячеек. Я предполагаю, что вы знакомы с ними.
Получите содержимое текстового поля и сохраните его в общедоступной статической переменной, после чего вы сможете получить доступ к этой переменной в средстве просмотра таблиц:
public static String txtContents;
txtContents = txt.getText();
Получите индекс строки, добавив это в свой слушатель кнопки:
String rowIdx = event.widget.getData(----);
разобрать его в целое число и удалить выбранную строку из таблицы:
table.remove(int rowIdx);