SWT:获取对话框的内容并将数据存储在表格查看器中

时间:2014-06-06 04:48:36

标签: java swt jface tableviewer

我有一个向导页面,其中包含一个包含5列的Jface TableViewer。向导页面还包含“添加”和“删除”按钮。单击“添加”按钮时,将打开一个新的“对话框”,其中包含3个文本框和2个组合框,用户可在其中输入详细信息。

到目前为止一切都很好,但我想知道如何获取文本框和组合框的内容(在用户单击对话框中的“确定”按钮后)并将相同的内容存储在表中我的向导页面的查看器?我是否需要使用MouseListener并覆盖鼠标按下方法并在鼠标按下方法中写入逻辑以获取内容?或者还有其他方法吗?要获取内容,我只是简单地说:

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

获取对话框窗口内容并将数据存储在表中的方法是什么?

当用户点击对话框的“删除”按钮时,如何删除表格中的选定行?

2 个答案:

答案 0 :(得分:0)

获取文本框内容并将其存储在公共静态变量中,然后您可以在表查看器中访问该变量:

public static String txtContents;
txtContents = txt.getText();

通过在按钮侦听器中添加行索引来获取行索引:

String rowIdx = event.widget.getData(----);

将其解析为整数并从表中删除所选行:

table.remove(int rowIdx);

答案 1 :(得分:0)

最好的做法是构建一个模型,用于存储对话框中控件的值,并通过设置为表输入的模型列表来操作表中元素的添加和删除。

  1. 使用setter和getter构建模型以存储对话框输入。例如,DialogModel
  2. 在向导类中,添加List<DialogModel> tableViewerEntries;作为要设置为表输入的类成员。即,tableViewer.setInput(tableViewerEntries);
  3. 按下对话框中的确定按钮时,请执行以下操作:

    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();
    
  7. 应相应调整表查看器的内容和标签提供程序,以将模型属性显示为单元格值。我假设你熟悉它们。