如何在SWT表标题中添加“(de)全选”复选框?

时间:2010-08-19 10:44:19

标签: java checkbox swt

我有一个SWT表,我用SWT.CHECK样式进行实例化,以便在每一行旁边显示一个复选框。我的用户在表的标题行中请求了另一个复选框,以允许他们通过单击选择/取消选择所有行。

我看不出任何明显的方法,我只通过Google找到了Swing / JTable示例。有谁知道如何做到这一点?我希望没有重新实现Table或退回标题上下文菜单就可以了。

3 个答案:

答案 0 :(得分:6)

只需创建两个复选框图像。第一个没有勾选,第二个没有勾选。现在将第一个图像添加到tableColumn标题。之后,以第一次单击按钮的方式向tableColumn添加侦听器,应该触发table.selectALL()方法,同时将tableColumn标题图像更改为第二个。当您再次单击按钮时,请调用table.deSelectAll()方法并将tableColumn标头替换为第一个图像。

您可以使用以下条件:

  

单击复选框(图像)时,使用for循环检查是否,   选中表中的任何复选框。如果有人被发现   然后检查fire table.deSelectAll()方法,否则fire   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();
            }
        }

    }
});

答案 1 :(得分:3)

您可以使用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()非常有用。

答案 2 :(得分:0)

  

完整描述此代码:: de)选择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;
    }
}

感谢....