2012-02-03 2 views
3

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

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

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

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

    Delete column approach #1

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

    • Не похоже, чтобы скрыть ScrollBar
       

    Delete column approach #2

Так что мои вопросы:

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

ответ

3

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

// 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

+0

Clever. Из любопытства, какой код вы используете для прокрутки 'ScrolledComposite' при прокрутке таблицы? –

+0

@EdwardThomson: обновлен ответ – seand

Смежные вопросы