Я пытался визуализировать таблицу с помощью jface. проблема в том, что один из столбцов, которые я визуализирую, содержит индекс элемента внутри массива. Я делаю следующее:
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object object) {
//EmployeeNames is list of String
return String.valueOf(company.getEmployeeNames().indexOf(object)+ 1);
}
});
Это всегда будет возвращать первое появление индекса в случае наличия каких-либо дубликатов. У меня нет возможности изменять тип имен сотрудников.
Не могли бы вы подсказать, как решить эту проблему с индексом?
1 ответ
Решение 1. Индекс ячейки
Здесь небольшой класс, который можно использовать в качестве поставщика меток столбца для отображения номера строки в JFace TableViewer.
В основном он ищет не индекс объекта, связанного с ячейкой, а саму ячейку.
import java.util.Arrays;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerColumn;
public class RowNumberLabelProvider extends CellLabelProvider {
private TableViewer viewer;
protected void initialize(ColumnViewer viewer, ViewerColumn column) {
super.initialize(viewer, column);
this.viewer = null;
if (viewer instanceof TableViewer) {
this.viewer = (TableViewer) viewer;
}
}
public void update(ViewerCell cell) {
super.update(cell);
if (viewer != null) {
int index = Arrays.asList(viewer.getTable().getItems()).indexOf(cell.getItem());
cell.setText("" + (index + 1));
}
}
}
Чтобы использовать его, просто установите его в качестве поставщика меток для вашего столбца.
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn.setLabelProvider(new RowNumberLabelProvider());
Я не уверен, будет ли это работать также, когда включены фильтры или таблица отсортирована.
Решение 2. Поиск по ссылке
В качестве альтернативы вы также можете попробовать поискать объект по ссылке:
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object object) {
int index = 1;
for (String employee : company.getEmployeeNames()) {
if (employee == object)
return String.valueOf(index);
index++;
}
return "";
}
});
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.