JFace: добавление изображений в просмотрщик таблиц создает проблему

У меня есть просмотрщик таблицы с 5 столбцами. В 1-м столбце я проверяю некоторые условия и добавляю изображение, и у остальных столбцов будет текст, но когда я пытаюсь добавить изображение, а затем добавить остальные столбцы с текстом, то текст 2-го столбца располагается прямо рядом с изображением в 1-м столбце. Вот мой пример кода:

TableItem item = new TableItem(table, SWT.NONE);
if(condition) {
item.setImage(image);
}
else {
item.setImage(image);
}
item.setText(new String[]{"street", "city","state","Zip Code"});

Проблема в том, что строка "улица" находится прямо рядом с изображением в самом первом столбце, но я хочу, чтобы строка "улица" была во втором столбце, а остальные строки - в последующих столбцах. Что я здесь не так делаю? Как добавить элементы таблицы из 2-го столбца?

2 ответа

Каждый столбец в таблице может содержать как изображение, так и текст.

призвание item.setImage(image) устанавливает изображение для первого столбца.

призвание item.setText(String []) устанавливает текст для каждого столбца, начиная с первого столбца. Таким образом, ваша "улица" идет рядом с изображением.

Если вы не хотите, чтобы текст в первом столбце, затем установите текст для этого столбца пустым:

item.setText(new String[]{"", "street", "city", "state", "Zip Code"});

Обновить:

Вы также можете установить текст для отдельных столбцов с помощью

item.setText(column, text);

Если вы используете TableViewer вы не должны использовать TableItemвместо этого используйте провайдера меток и провайдера контента.

Не так ясно. Если вы хотите просто изображение в первом столбце, тогда просто предоставьте пустую строку:

item.setText(new String[]{"", "street", "city","state","Zip Code"});

Но не стоит работать с jface без использования преимуществ ContentProvider и LabelProvider. Поэтому вы должны прочитать некоторые руководства по jface, прежде чем делать подобные вещи.

Пример:

  TableViewer tableViewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
      tableViewer.setContentProvider(ArrayContentProvider.getInstance());

      TableViewerColumn tableViewerColumnImg = new TableViewerColumn(tableViewer, SWT.NONE);
      tableViewerColumnImg.setLabelProvider(new ColumnLabelProvider()
      {
         @Override
         public Image getImage(Object element)
         {
            Person p = (Person) element;
            return p.getImage();
         }
      });
      TableColumn tblclmnImg = tableViewerColumnImg.getColumn();
      tblclmnImg.setWidth(100);
      tblclmnImg.setText("Img");

      TableViewerColumn tableViewerColumnStreet = new TableViewerColumn(tableViewer, SWT.NONE);
      tableViewerColumnStreet.setLabelProvider(new ColumnLabelProvider()
      {
         @Override
         public String getText(Object element)
         {
            Person p = (Person) element;
            return p.getStreet();
         }
      });
      TableColumn tblclmnStreet = tableViewerColumnStreet.getColumn();
      tblclmnStreet.setWidth(100);
      tblclmnStreet.setText("Street");


      tableViewer.setInput(//set an array of persons here

);
Другие вопросы по тегам