【发布时间】:2017-01-19 19:30:19
【问题描述】:
我有一个使用SWT.CHECK 样式实例化的SWT 表,以便在每一行旁边显示一个复选框。我的用户在表格的标题行中请求了另一个复选框,以允许他们通过单击选择/取消选择所有行。
我看不到任何明显的方法来做到这一点,而且我只通过 Google 找到了 Swing/JTable 示例。有谁知道如何做到这一点?我希望无需重新实现 Table 或退回到标题上下文菜单即可。
【问题讨论】:
我有一个使用SWT.CHECK 样式实例化的SWT 表,以便在每一行旁边显示一个复选框。我的用户在表格的标题行中请求了另一个复选框,以允许他们通过单击选择/取消选择所有行。
我看不到任何明显的方法来做到这一点,而且我只通过 Google 找到了 Swing/JTable 示例。有谁知道如何做到这一点?我希望无需重新实现 Table 或退回到标题上下文菜单即可。
【问题讨论】:
只需创建两个复选框图像。第一个没有刻度,第二个有刻度。现在将第一个图像添加到 tableColumn 标题。之后将侦听器添加到 tableColumn,这样当您第一次单击按钮时,table.selectALL() 方法应该被触发,同时将 tableColumn 标题图像更改为第二个。当您再次单击按钮时,调用table.deSelectAll() 方法并将tableColumn 标题替换为第一张图片。
你可以使用这个条件:
当复选框(图片)被点击时,使用 for 循环检查是否, 选中表中的任何复选框。如果有人被发现 检查然后触发 table.deSelectAll() 方法,否则触发 table.selectAll() 方法。
table/widow 调整大小时“复选框”不会有任何问题。
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();
}
}
}
});
【讨论】:
您可以使用FormLayout 来允许堆叠对象,然后在表格的顶部添加一个复选框,如下所示:
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);
您可能会发现它有助于正确对齐复选框以使用table.getHeaderHeight() 获取表格标题行的高度。
【讨论】:
完整描述此代码:: de)select all”复选框在 SWT 表中 标题
public class TaskView extends ViewPart {
public static TableItem std_item;
public static List<Student> std=new ArrayList<Student>();
public static Table table;
private TableColumn col_name_add;
private TableColumn col_image_add;
static int countcheck;
static int staticno=1;
static int check=0,uncheck=0;
public TaskView() {
setTitleImage(ResourceManager.getPluginImage("RCP_Demo", "icons/Tasksview.png"));
}
@Override
public void createPartControl(Composite parent) {
parent.setLayout(null);
////////// Table Create
table = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION|SWT.CHECK|SWT.CENTER);
////SWT.CHECK: Display first column check box
table.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem item = table.getItem(table.getSelectionIndex());
for(int col=1;col<table.getColumnCount();col++)
{
//Table_Column Checked or Not
if(item.getChecked())
item.setChecked(false);
else
item.setChecked(true);
/////////First column value get
if(col==1)
{
System.out.println(item.getText(col));
}
TableItem[] itemCheck = table.getItems();
for(int i=0;i<table.getItemCount();i++)
{
if(itemCheck[i].getChecked())
++check;
else
++uncheck;
}
if(check==table.getItemCount())
//Change column image:Checkbox checked
col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/check.png"));
else
//Change column image:Checkbox Unchecked
col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/uncheck.png"));
//System.out.println("Check:"+check+"uncheck"+uncheck);
check=0;
uncheck=0;
}
}
});
table.setBounds(10, 10, 343, 297);
table.setHeaderVisible(true);
table.setLinesVisible(true);
////// SWT Table header Column
col_image_add = new TableColumn(table, SWT.LEFT);
col_image_add.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
//All Row selected or Not
//column Icon change checked(selected) or not
System.out.println("Total Row Count:"+table.getItemCount());
TableItem item[] = table.getItems();
if(staticno==1)
{
for(int i=0;i<table.getItemCount();i++)
{
item[i].setChecked(true);
col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/check.png"));
}
staticno=0;
}else
{
for(int i=0;i<table.getItemCount();i++)
{
item[i].setChecked(false);
col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/uncheck.png"));
}
staticno=1;
}
}
}
});
col_image_add.setMoveable(true);
col_image_add.setToolTipText("Click");
col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/uncheck.png"));
col_image_add.setWidth(36);
//Dynamic column Name add
String[] Col_names={"Stud_id","Stud_Name","Stud_Gender"};
for(int i=0;i<Col_names.length;i++)
{
col_name_add = new TableColumn(table,SWT.CENTER);
col_name_add.setWidth(100);
col_name_add.setText(Col_names[i]);
}
}
public TableViewer getViewer() {
return null;
}
}
谢谢....
【讨论】: