Добавление столбца значка удаления в таблицу Eclipse - PullRequest
3 голосов
/ 03 февраля 2012

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

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

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

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

    Delete column approach #1

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

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

    Delete column approach #2

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

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

1 Ответ

3 голосов
/ 05 февраля 2012

Я нашел способ скрыть полосу прокрутки для моего второго подхода. В общем, все, что вам нужно сделать, это:

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

Результат:

Delete column image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...