SWT: извлечение содержимого диалогового окна и сохранение данных в средстве просмотра таблиц

У меня есть страница мастера, которая содержит Jface TableViewer с 5 столбцами. Страница мастера также содержит кнопки "Добавить" и "Удалить". При нажатии кнопки "Добавить" открывается новый диалог с 3 текстовыми полями и 2 комбинированными полями, и пользователь вводит в них подробности.

До этого момента все было в порядке, но я хотел бы знать, как извлечь содержимое текстовых полей и полей со списком (после того, как пользователь нажмет кнопку "ОК" в диалоговом окне) и сохранить то же содержимое в средстве просмотра таблиц моего страница мастера? Нужно ли использовать MouseListener и переопределить метод мыши вниз и записать логику в методе мыши вниз для получения содержимого? Или есть другой способ сделать это? Чтобы получить содержимое, я просто говорю, например:

TextBox txt = new TextBox(shell, SWT.BORDER);
String txtContents = txt.getText();

Каков подход для извлечения содержимого диалогового окна и сохранения данных в таблице?

И как мне удалить выбранную строку в таблице, когда пользователь нажимает кнопку "Удалить" в диалоговом окне?

2 ответа

Решение

Лучше всего было бы создать модель, которая будет хранить значения из элементов управления в диалоговом окне и управлять добавлением и удалением элементов из таблицы через список моделей, заданных в качестве входных данных для таблицы.

  1. Постройте модель с сеттерами и геттерами для хранения входных данных диалога. например., DialogModel
  2. В классе мастера добавьте List<DialogModel> tableViewerEntries; в качестве члена класса, который должен быть установлен в качестве входных данных таблицы. т.е. tableViewer.setInput(tableViewerEntries);
  3. Когда кнопка Ok в диалоговом окне нажата, сделайте следующее:

    DialogModel model = new DialogModel(); 
    ...
    @Override
    protected void okPressed() {
    model.setAttribute1(text1.getText());
    model.setAttribute2(combo1.getText()); // or use getItem(selectedItemIndex); 
    ...
    }
    
  4. Создайте открытый метод в классе диалога, который возвращает модель. сказать., getModel();

  5. Внутри слушателя выбора кнопки Добавить, сделайте

    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();
    }
    
  6. Для удаления просто удалите выбранную модель из списка записей таблицы.

    // 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);
Другие вопросы по тегам