SWT / JFace: отключен флажок в столбце таблицы - PullRequest
3 голосов
/ 27 мая 2011

Создать столбец Table с флажком, например, с помощью флага SWT.CHECK, очень просто. Но как сделать флажки в определенных строках таблицы недоступными для редактирования, тогда как флажки в других строках остаются редактируемыми?

Ответы [ 3 ]

3 голосов
/ 29 мая 2011

Я не знаю простой способ сделать это.

Но я вижу два возможных решения: JFace Snippet делает довольно экстремальный хак, чтобы эмулировать нативно выглядящие флажки в таблицах с изображениями здесь .

И тогда вы могли быположить собственные флажки в простой таблице, как это .Таким образом, вы можете самостоятельно контролировать состояние каждого флажка.

Я бы выбрал второе решение.

2 голосов
/ 27 июля 2012

Я столкнулся с подобной проблемой и смог решить ее в таблице с помощью SWT.check. В виджете Выбранное событие таблицы вы можете попробовать следующий код:

TableItem[] item = table.getItems();

for(int j=0; j<item.length;j++)
        {
            TableItem tblItem = item[j];
            if (tblItem.getChecked())
            {
                table.setSelection(j);
                 if(codition for the checkbox to be non-Editable written here)
                 {
                     item[table.getSelectionIndex()].setChecked(false);
                 }
            }
        }

В приведенном выше коде после того, как таблица заполнена, и когда пользователь пытается проверить любой элемент в таблице, должен быть вызван вышеуказанный код. Если флажок установлен, если условие соответствует тому, что checkBox не подлежит редактированию, флажок не устанавливается, в противном случае он выбирается. Таким образом, в таблице некоторые строки могут быть редактируемыми, в то время как другие будут недоступны для редактирования в соответствии с требуемым условием .

2 голосов
/ 27 мая 2011

попробуйте это:

table.addListener(SWT.Selection, new Listener() {
   public void handleEvent(Event event) {
       if( event.detail == SWT.CHECK ) {
           event.detail = SWT.NONE;
           event.type   = SWT.None;
           event.doIt   = false;
           ((TableItem)event.item).setChecked(false);
       }
   }
});
...