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
);