Настройка выпадающего списка в качестве содержимого ячейки для TableItems для нескольких столбцов в таблице java.swt - PullRequest
0 голосов
/ 09 июня 2018

Я строю таблицу и перебираю список "methodtraces2", чтобы установить каждую строку этой таблицы.Я бы хотел, чтобы в 4 столбцах содержался комбо-бокс.Более конкретно, я бы хотел, чтобы в столбцах «Callers», «Callees», «CallersExecuted» и «CalleesExecuted» в качестве содержимого ячеек были комбинированные списки.Каждая запись в выпадающем списке должна соответствовать поведению ToString элемента соответствующего списка.Каждая ячейка в столбце «Вызывающие» должна быть заполнена комбинированным списком, и каждый комбинированный список должен содержать все записи в вызывающих List<Method2Representation>.Точно так же каждая ячейка в столбце «Callees» должна быть заполнена списком, и каждый комбинированный список должен содержать все записи в List<Method2Representation> вызываемых.То же самое относится к "callersexecuted" и "calleesexecuted".Столбцы, для которых мне нужны комбинированные списки, обозначены как комментарии в коде ниже, списки, которые будут использоваться для заполнения этих комбинированных списков, также обозначены как комментарии в приведенном ниже коде:

    shell = new Shell();
    shell.setSize(1500, 1500);
    shell.setText("SWT Application TEST");

    table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
    table.setBounds(0, 10, 2000, 2000);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    TableColumn tblclmnMethodID = new TableColumn(table, SWT.NONE);
    tblclmnMethodID.setWidth(100);
    tblclmnMethodID.setText("MethodID");

    TableCursor tableCursor = new TableCursor(table, SWT.NONE);

    TableColumn tblclmnMethodName = new TableColumn(table, SWT.NONE);
    tblclmnMethodName.setWidth(100);
    tblclmnMethodName.setText("MethodName");

    TableColumn tblclmnRequirementID = new TableColumn(table, SWT.NONE);
    tblclmnRequirementID.setWidth(153);
    tblclmnRequirementID.setText("RequirementID");

    TableColumn tblclmnRequirementName = new TableColumn(table, SWT.NONE);
    tblclmnRequirementName.setWidth(150);
    tblclmnRequirementName.setText("RequirementName");

    TableColumn tblclmnClassID = new TableColumn(table, SWT.NONE);
    tblclmnClassID.setWidth(100);
    tblclmnClassID.setText("ClassID");

    TableColumn tblclmnClassName = new TableColumn(table, SWT.NONE);
    tblclmnClassName.setWidth(100);
    tblclmnClassName.setText("ClassName");

    TableColumn tblclmnGold = new TableColumn(table, SWT.NONE);
    tblclmnGold.setWidth(100);
    tblclmnGold.setText("Gold");

    TableColumn tblclmnSubject = new TableColumn(table, SWT.NONE);
    tblclmnSubject.setWidth(100);
    tblclmnSubject.setText("Subject");

    TableColumn tblclmnGoldpredictionCaller = new TableColumn(table, SWT.NONE);
    tblclmnGoldpredictionCaller.setWidth(150);
    tblclmnGoldpredictionCaller.setText("GoldPredictionCaller");

    TableColumn tblclmnGoldpredictionCallee = new TableColumn(table, SWT.NONE);
    tblclmnGoldpredictionCallee.setWidth(170);
    tblclmnGoldpredictionCallee.setText("GoldPredictionCallee");
    //COMBO BOX NEEDED FOR CALLERS RETRIEVED FROM 
    // List<Method2Representation> callers
    TableColumn tblclmnCallers = new TableColumn(table, SWT.NONE);
    tblclmnCallers.setWidth(100);
    tblclmnCallers.setText("Callers");
    //COMBO BOX NEEDED FOR CALLEES RETRIEVED FROM 
    // List<Method2Representation> callees  
    TableColumn tblclmnCallees = new TableColumn(table, SWT.NONE);
    tblclmnCallees.setWidth(100);
    tblclmnCallees.setText("Callees");
    //COMBO BOX NEEDED FOR CALLERSEXECUTED RETRIEVED FROM 
    // List<Method2Representation> callersExecuted
    TableColumn tblclmnCallersExecuted = new TableColumn(table, SWT.NONE);
    tblclmnCallersExecuted.setWidth(150);
    tblclmnCallersExecuted.setText("CallersExecuted");
    //COMBO BOX NEEDED FOR CALLEESEXECUTED RETRIEVED FROM 
    // List<Method2Representation> calleesExecuted
    TableColumn tblclmnCalleesExecuted = new TableColumn(table, SWT.NONE);
    tblclmnCalleesExecuted.setWidth(150);
    tblclmnCalleesExecuted.setText("CalleesExecuted");



    for(MethodTrace2 meth: methodtraces2) {
        TableItem item1 = new TableItem(table, SWT.NONE);
        //callees combobox should populate tblclmnCallees
        List<Method2Representation> callees = meth.getCalleesList(); 
        //callers combobox should populate tblclmnCallers
        List<Method2Representation> callers = meth.getCallersList(); 
        //callersExecuted combobox should populate tblclmnCallersExecuted 
        List<Method2Representation> callersExecuted = meth.getCallersListExecuted(); 
        //calleesExecuted combobox should populate tblclmnCalleesExecuted 
        List<Method2Representation> calleesExecuted = meth.getCalleesListExecuted(); 
        item1.setText(new String[] { meth.MethodRepresentation.getMethodid(), meth.MethodRepresentation.getMethodname(), meth.Requirement.getID(), meth.Requirement.RequirementName, meth.ClassRepresentation.classid, meth.ClassRepresentation.classname, meth.gold
                , meth.subject, meth.goldpredictionCaller, meth.goldpredictionCallee});
    }

Вот мой класс Method2Representation,Я хотел бы, чтобы каждая строка в выпадающем списке была равна поведению toString класса Method2Representation.Вот класс ниже:

public class Method2Representation {
String methodid; 
String methodname;
List<Requirement2> requirements; 
public Method2Representation(String methodid, String methodname) {
    super();
    this.methodid = methodid;
    this.methodname = methodname;
}
public Method2Representation() {
    // TODO Auto-generated constructor stub
}
public String getMethodid() {
    return methodid;
}
public void setMethodid(String methodid) {
    this.methodid = methodid;
}
public String getMethodname() {
    return methodname;
}
public void setMethodname(String methodname) {
    this.methodname = methodname;
}
@Override
public String toString() {
    return "Method2Representation [methodid=" + methodid + ", methodname=" + methodname + "]";
}
public List<Requirement2> getRequirements() {
    return requirements;
}
public void setRequirements(List<Requirement2> requirements) {
    this.requirements = requirements;
}
public Method2Representation(String methodid, String methodname, List<Requirement2> requirements) {
    super();
    this.methodid = methodid;
    this.methodname = methodname;
    this.requirements = requirements;
}

}       

1 Ответ

0 голосов
/ 09 июня 2018

Я лично предпочитаю использовать Jface's TableViewer и ComboBoxCellEditor для редактирования ячеек.

Но ниже приведен пример добавления комбо в ячейку SWT Table.

public class TableExmaple {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    Table table = new Table(shell, SWT.BORDER | SWT.MULTI);
    table.setLinesVisible(true);
    for (int i = 0; i < 3; i++) {
      TableColumn column = new TableColumn(table, SWT.NONE);
      column.setWidth(100);
    }
    for (int i = 0; i < 12; i++) {
      new TableItem(table, SWT.NONE);
    }
    TableItem[] items = table.getItems();
    for (int i = 0; i < items.length; i++) {
      TableEditor tableEditor = new TableEditor(table);
      CCombo combo = new CCombo(table, SWT.NONE);
      combo.setText("CCombo");
      combo.add("combo item 1");
      combo.add("combo item 2");
      tableEditor.grabHorizontal = true;
      tableEditor.setEditor(combo, items[i], 0);
      tableEditor = new TableEditor(table);
      Text text = new Text(table, SWT.NONE);
      text.setText("Text");
      tableEditor.grabHorizontal = true;
      tableEditor.setEditor(text, items[i], 1);
      tableEditor = new TableEditor(table);
      Button button = new Button(table, SWT.CHECK);
      button.pack();
      tableEditor.minimumWidth = button.getSize().x;
      tableEditor.horizontalAlignment = SWT.LEFT;
      tableEditor.setEditor(button, items[i], 2);
    }
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}
...