Добавление столбца значка удаления в таблицу Eclipse

В настоящее время я реализовал Table с TableEditor в моем плагине Eclipse для поддержки редактирования на уровне ячеек с поддержкой клавиатуры (для обхода ячеек с помощью редактора).

Мне также нужен способ удаления строк, и я не хотел идти с практикой добавления кнопки удаления рядом с таблицей, поскольку для удаления строки требуется 2 щелчка (1 для выбора строки и 1 для ее удаления).). Вместо этого я хочу отдельный столбец, который заполнен иконками удаления. Я подумал о 2 способах сделать это и столкнулся с проблемами с обоими:

  1. Добавьте еще один столбец к Table , установите значок с TableItem.setImage() , Есть несколько проблем с этим подходом, и вы можете увидеть их ниже:

    • При выборе строки значок тоже выделяется
    • При наведении курсора на значок появляется всплывающая подсказка с изображением, которую, по-видимому, нельзя отключить.
    • Кажется, не может быть вертикальное центрирование изображения внутри ячейки

    Удалить столбец № 1

  2. Добавить ScrolledComposite рядом с таблицей и заполните ее значками удаления. Это звучит немного безумно, но я на самом деле сделал это довольно далеко с этим. Идея состоит в том, чтобы заполнить ScrolledComposite с помощью значков удаления принудительно прокрутите ее с помощью полосы прокрутки таблицы и удалите соответствующую строку при нажатии значка. Я столкнулся только с одной проблемой блокировки с этим подходом:

    • Не могу скрыть полосу прокрутки

    Удалить столбец подход № 2

Итак, мои вопросы:

  • Как я могу решить проблемы, упомянутые для любого из этих подходов?
  • Есть ли какой-то другой лучший подход?

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

Результат:

Удалить изображение столбца

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