【问题标题】:How can I put a "(de)select all" check box in an SWT Table header?如何在 SWT 表标题中放置“(取消)全选”复选框?
【发布时间】:2017-01-19 19:30:19
【问题描述】:

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

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

【问题讨论】:

    标签: java checkbox swt


    【解决方案1】:

    只需创建两个复选框图像。第一个没有刻度,第二个有刻度。现在将第一个图像添加到 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();
                }
            }
    
        }
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用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() 获取表格标题行的高度。

      【讨论】:

      • 抱歉回复慢。多年来,我一直想尝试这个。如果它按照我的想法去做,我会试一试并接受:) 谢谢!
      • 没问题。如果效果不如预期,请发表评论。
      【解决方案3】:

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

      谢谢....

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        相关资源
        最近更新 更多