Как получить текстовое содержимое таблицы SWT с произвольными элементами управления - PullRequest
2 голосов
/ 11 марта 2009

У меня есть различные элементы управления на столе, используя TableEditor.

...
TableItem [] items = table.getItems ();
for (int i=0; i<items.length; i++) {
    TableEditor editor = new TableEditor (table);
    final Text text1 = new Text (table, SWT.NONE);
    text1.setText(listSimOnlyComponents.get(i).getName());
    text1.setEditable(false);
    editor.grabHorizontal = true;
    editor.setEditor(text1, items[i], 0);

    editor = new TableEditor (table);
    final CCombo combo1 = new CCombo (table, SWT.NONE);
    combo1.setText("");
    Set<String> comps = mapComponentToPort.keySet();
    for(String comp:comps)
        combo1.add(comp);
    editor.grabHorizontal = true;
    editor.setEditor(combo1, items[i], 1);
} //end of for
...

Когда я пытаюсь получить текст в таблице, используя getItem(i).getText, я получаю пустую строку

...
TableItem [] items = table.getItems ();
for(int i=0; i<items.length; i++) {
    TableItem item = items[i];
    String col0text = items[i].getText(0);  //this text is empty
    String col1text = items[i].getText(1);  //this text is empty
}
...

Почему getText возвращает пустые строки, даже если в таблице появляется текст?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2014

Вместо использования свойства text вы можете вместо этого использовать свойство data.

Преимущества:

  1. вы можете прикрепить данные (например, управляющую или сложную структуру данных) непосредственно к элементу таблицы.
  2. единственное, что нужно знать при создании элемента таблицы в редакторе ячеек таблицы, - это ссылка на объект, которая будет сохранена в свойстве data.
  3. вам не нужны такие средства обработки событий (просто читайте данные элементов управления, когда они вам действительно нужны).

Создать:

TableItem item = new TableItem(table, SWT.None);
TableEditor editor = new TableEditor(table);
Button checkbox = new Button(table, SWT.CHECK);
checkbox.pack();
editor.setEditor(checkbox,item,0);
item.setData("cb",checkbox);   // using key enables you to add more pieces of complex data

Читать:

for (TableItem item : table) {
  Button checkbox = (Button) item.getData("cb");
  if (checkbox.getSelection()) { /* ... do whatever you want */ }
}

Когда таблица появляется, флажок виден и его можно щелкнуть. Использование метода setText не работает в случае прозрачных фоновых элементов управления -> вы увидите текст ячейки элементов таблицы ниже ваш контроль (я пробовал это).

В любом случае было бы намного проще, если бы можно было расширить класс элементов таблицы, чтобы скрыть даже ключ данных. Но, как обычно, в подклассе отказано.

1 голос
/ 11 марта 2009

в прослушивателях событий для элементов управления, которые я добавил

  item.setText call
  ...
  combo1.addSelectionListener(new SelectionAdapter() {
  public void widgetSelected(SelectionEvent evt) {
              String sel = combo2.getText();
      item.setText(ComponentPortToConnectCol, sel);
}});
  ...

Это дает мне желаемый результат. Спасибо OTisler за подсказку

0 голосов
/ 11 марта 2009

Как вы настраиваете свой стол? Я скопировал ваш код для его отладки и настроил таблицу, как показано ниже (сначала для цикла)
Я пытался, но не смог воспроизвести проблему, которую вы видите. Это может быть способ добавления вещей на стол.
Примеры TableEditor

Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        final Table table = new Table(shell, SWT.BORDER | SWT.MULTI);
        for (int i = 0; i < 3; i++) {
            TableItem item = new TableItem(table, SWT.NONE);
            item.setText(new String[] { "" + i, "" + i, "" + i });
        }
        TableItem [] items = table.getItems();
        for (int i=0; i<items.length; i++) {
            TableEditor editor = new TableEditor (table);
            final Text text1 = new Text (table, SWT.NONE);
            text1.setText("TEST");
            text1.setEditable(false);
            editor.grabHorizontal = true;
            editor.setEditor(text1, items[i], 0);

            editor = new TableEditor (table);
            final CCombo combo1 = new CCombo (table, SWT.NONE);
            combo1.setText("");
            String[] comps = {"A","B","C"};
            for(String comp:comps)
                combo1.add(comp);
            editor.grabHorizontal = true;
            editor.setEditor(combo1, items[i], 1);
        } //end of for


        TableItem [] items2 = table.getItems ();
        for(int i=0; i<items2.length; i++) {
            TableItem item = items2[i];
            String col0text = items2[i].getText(0);  //returns '0' first for loop
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...