我有一个SWT表,我正在使用SWT.CHECK样式进行实例化,以便在每一行旁边显示一个复选框.我的用户在表的标题行中请求了另一个复选框,以允许他们通过单击选择/取消选择所有行.
我看不出任何明显的方法,我只通过谷歌找到了Swing/JTable的例子.有谁知道如何做到这一点?我希望没有重新实现Table或退回头文件上下文菜单.
小智 6
只需创建两个复选框图像.第一个没有勾选,第二个没有勾选.现在将第一个图像添加到tableColumn标题.之后,以第一次单击按钮的方式向tableColumn添加侦听器,table.selectALL()应该触发方法,同时将tableColumn标题图像更改为第二个.再次单击按钮时,调用table.deSelectAll()方法并将tableColumn标头替换为第一个图像.
你可以使用这个条件:
单击复选框(图像)时,使用for循环检查是否已选中表中的任何复选框.如果找到任何人检查然后激发table.deSelectAll()方法,否则激活table.selectAll()方法.
在表格/窗口大小调整期间,"复选框"不会有任何问题.
tableColumn0.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
// TODO Auto-generated method stub
boolean checkBoxFlag = false;
for (int i = 0; i < table.getItemCount(); i++) {
if (table.getItems()[i].getChecked()) {
checkBoxFlag = true;
}
}
if (checkBoxFlag) {
for (int m = 0; m < table.getItemCount(); m++) {
table.getItems()[m].setChecked(false);
tableColumn0.setImage(new Image(Display.getCurrent(),
"images/chkBox.PNG"));
table.deselectAll();
}
} else {
for (int m = 0; m < table.getItemCount(); m++) {
table.getItems()[m].setChecked(true);
tableColumn0.setImage(new Image(Display.getCurrent(),
"images/chkBox2.PNG"));
table.selectAll();
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
您可以使用 aFormLayout来允许堆叠对象,然后在表格顶部添加一个复选框,如下所示:
FormData fd = new FormData();
fd.left = new FormAttachment(table, 5, SWT.LEFT);
fd.top = new FormAttachment(table, 5, SWT.TOP);
checkbox.setLayoutData(fd);
checkbox.moveAbove(table);
Run Code Online (Sandbox Code Playgroud)
您可能会发现它对于正确对齐复选框以获取表标题行的高度很有用table.getHeaderHeight()。