Изберете ред в TableViewer

Имам TableViewer в моето приложение, което има следните функции:

  • Той получава данни от уеб услуга и при избиране на ред бутоните се активират и можете да извършвате операции (всички тези операции извикват уеб услугата, така че таблицата остава в синхрон с базата данни).
  • Когато добавя нов ред, изпращам команда "добавяне" към уеб услугата и опреснявам таблицата. Сега имам нова линия и знам коя линия е новата.

Сега искам да избера новия ред по подразбиране и опитах много команди като tableViewer.getTable().select(index); и както е сега:

public void selectAdded(int id) {
    tableViewer.getTable().setSelection(id);
}

Тази снимка показва какъв е проблемът: Двата различни типа селекции

Горният показва как работи сега с този код. Редът по-долу показва как изглежда, когато щракна върху ред. Проблемът е, че бутоните не се активират и имам две текстови полета само за четене, които остават празни, вместо да показват информацията, от която се нуждая. Но когато щракна, всичко работи нормално.

Какво трябва да направя, за да постигна, че selectAdded(int id) действа като щракване? Решението трябва да е мултиплатформено (Mac/Windows), но поне на Mac.


person Tamás Juhász    schedule 07.04.2015    source източник


Отговори (1)


Не използвайте Table методите за избор, които използват TableViewer. Вместо това използвайте

ISelection selection = new StructuredSelection(model object);

tableViewer.setSelection(selection);

„моделен обект“ е моделният обект за реда, който искате да изберете (както е върнат от вашия доставчик на съдържание).

person greg-449    schedule 07.04.2015
comment
Благодаря ви, работи. Шефът ми забеляза, че би било по-добре, ако селекцията е показана със син цвят (сега е тъмно сив). Някаква идея? - person Tamás Juhász; 08.04.2015
comment
На повечето платформи се използва тъмно синьо, когато контролата (таблица) има фокус, тъмно сиво, когато нещо друго има фокус. Промяната на цвета на фокуса е трудна. - person greg-449; 08.04.2015
comment
Благодаря ти много! Добавям tableViewer.getTable().setFocus(); и изглежда перфектно, както исках. - person Tamás Juhász; 08.04.2015