Добавление столбца значка удаления в таблицу Eclipse
В настоящее время я реализовал Table
с TableEditor
в моем плагине Eclipse для поддержки редактирования на уровне ячеек с поддержкой клавиатуры (для обхода ячеек с помощью редактора).
Мне также нужен способ удаления строк, и я не хотел идти с практикой добавления кнопки удаления рядом с таблицей, поскольку для удаления строки требуется 2 щелчка (1 для выбора строки и 1 для ее удаления).). Вместо этого я хочу отдельный столбец, который заполнен иконками удаления. Я подумал о 2 способах сделать это и столкнулся с проблемами с обоими:
Добавьте еще один столбец к
Table
, установите значок сTableItem.setImage()
, Есть несколько проблем с этим подходом, и вы можете увидеть их ниже:- При выборе строки значок тоже выделяется
- При наведении курсора на значок появляется всплывающая подсказка с изображением, которую, по-видимому, нельзя отключить.
- Кажется, не может быть вертикальное центрирование изображения внутри ячейки
Добавить
ScrolledComposite
рядом с таблицей и заполните ее значками удаления. Это звучит немного безумно, но я на самом деле сделал это довольно далеко с этим. Идея состоит в том, чтобы заполнитьScrolledComposite
с помощью значков удаления принудительно прокрутите ее с помощью полосы прокрутки таблицы и удалите соответствующую строку при нажатии значка. Я столкнулся только с одной проблемой блокировки с этим подходом:- Не могу скрыть полосу прокрутки
- Не могу скрыть полосу прокрутки
Итак, мои вопросы:
- Как я могу решить проблемы, упомянутые для любого из этих подходов?
- Есть ли какой-то другой лучший подход?
1 ответ
Я нашел способ скрыть полосу прокрутки для моего второго подхода. В основном все, что вам нужно сделать, это:
// ScrolledComposite sc;
sc.setAlwaysShowScrollBars(true);
sc.getVerticalBar().setVisible(false);
А затем установите ширину ScrolledComposite
в 1
избавиться от лишнего пространства невидимого ScrollBar
занимает.
И чтобы синхронизировать полосы прокрутки:
// Table table;
// ScrolledComposite sc;
// int tableRowHeight;
protected void createTable() {
...
// Set the listener that dictates the table row height.
table.addListener(SWT.MeasureItem, new Listener() {
@Override
public void handleEvent(Event event) {
event.height = tableRowHeight;
}
});
// Set the listener for keeping the scrollbars in sync.
table.getVerticalBar().addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
syncDeleteColumnScrollBar();
}
});
}
// This is extracted out into a method so it can also be called
// when removing a table row.
protected void syncDeleteColumnScrollBar() {
sc.setOrigin(0, table.getVerticalBar().getSelection() * tableRowHeight);
}
Результат: