SWT / JFace:禁用表格列中的复选框

时间:2011-05-27 08:14:22

标签: checkbox swt jface

使用复选框列创建Table非常容易,例如,使用SWT.CHECK标记。但是如何使某些表行中的复选框不可编辑而其他行中的复选框仍然可编辑?

3 个答案:

答案 0 :(得分:3)

我不知道这样做的简单方法。

但是我看到了两个可能的解决方案:有一个JFace Snippet做了一个相当极端的黑客来模仿带有图像here的表中的原生复选框。

然后您可以将自己的复选框放入普通表中,例如this。这样你就可以自己控制每个复选框的状态。

我会选择第二个解决方案。

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:2)

我遇到过类似的问题,我可以使用SWT.check在表格中解决它。 在表格的widgetSelected事件中,您可以尝试以下代码:

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不可编辑,则不选中复选框,否则选中它。这样在表格中某些行可以编辑,而其他行根据所需条件不可编辑