SWT - TableViewer的添加删除按钮到列在表中 [英] SWT - Tableviewer adding a remove button to a column in the table

查看:421
本文介绍了SWT - TableViewer的添加删除按钮到列在表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有可能一个删除按钮添加到一个单元格在一个表中?我有5列的表,我想补充一个6列。我想第6列有各行中的删除按钮。

例如行:


  

| 10002 |部分|金属| 001 |是| [删除] |


这种方式,用户可以通过只点击按钮除去任何不需要的行。

我有在表中的标记栏,它是组合框。我创建了一个扩展 EditingSupport A类。

我会需要做一个扩展其它类 EditingSupport ,但创建一个按钮,而不是组合框的?

修改

 公共类AplotDataTableViewer TableViewer的扩展
{    公共AplotDataTableViewer(复合父母,INT风格)
    {
        超(父,风格);        表的表=的GetTable();
        的GridData的GridData =新的GridData(SWT.FILL,SWT.FILL,真实,真实);
        table.setLayoutData(的GridData);
        createColumns();
        table.setHeaderVisible(真);
        table.setLinesVisible(真);
        setContentProvider(新ArrayContentProvider());
    }    私人无效createColumns(){      的String []标题= {ITEMID,REVID,PRL,数据集名,EC标记};
      INT []界限= {150,150,100,150,100};      TableViewerColumn COL = createTableViewerColumn(标题[0],界限[0],0);
      col.setLabelProvider(新ColumnLabelProvider(){
         公共字符串的getText(Object元素){
            如果(元素的instanceof AplotDataModel.AplotDatasetData)
               返回((AplotDataModel.AplotDatasetData)元素).getDataset()的toString()。
            返回super.getText(元);
            }
         });      山口= createTableViewerColumn(标题[1],界限[1],1);
      col.setLabelProvider(新ColumnLabelProvider(){
         公共字符串的getText(Object元素){
            如果(元素的instanceof AplotDataModel.AplotDatasetData)
               返回((AplotDataModel.AplotDatasetData)元素).getRev()的toString()。
            返回super.getText(元);
            }
         });      山口= createTableViewerColumn(标题[2],界限[2],2);
      col.setLabelProvider(新ColumnLabelProvider(){
         公共字符串的getText(Object元素){
            如果(元素的instanceof AplotDataModel.AplotDatasetData)
               返回((AplotDataModel.AplotDatasetData)元素).getPRLValue()的toString()。
            返回super.getText(元);
            }
         });
      山口= createTableViewerColumn(标题[3],界限[3],3);
      col.setLabelProvider(新ColumnLabelProvider(){
         公共字符串的getText(Object元素){
            如果(元素的instanceof AplotDataModel.AplotDatasetData)
               返回((AplotDataModel.AplotDatasetData)元素).getDatasetName()的toString()。
            返回super.getText(元);
            }
         });       山口= createTableViewerColumn(标题[4],界限[4],4);
       col.setLabelProvider(新ColumnLabelProvider(){
          公共字符串的getText(Object元素){
             如果(元素的instanceof AplotDataModel.AplotDatasetData)
                返回((AplotDataModel.AplotDatasetData)元素).getMarkupValue();
             返回super.getText(元);
             }
          });       col.setEditingSupport(新OptionEditingSupport(本));    }    私人TableViewerColumn createTableViewerColumn(字符串头,诠释宽度,INT IDX)
    {
        TableViewerColumn列=新TableViewerColumn(这一点,SWT.LEFT,IDX);
        column.getColumn()的setText(标题)。
        column.getColumn()setWidth(宽度)。
        。column.getColumn()的setResizable(真);
        。column.getColumn()setMoveable(真);        返回列;
    }
}

修改

 山坳= createTableViewerColumn(标题[5],边界[5],5);
   col.setLabelProvider(新ColumnLabelProvider(){
      @覆盖
      公共无效更新(ViewerCell细胞){
         表项项=新的表项(的GetTable(),SWT.NONE);
         Button按钮=新按钮(的GetTable(),SWT.NONE);
         button.setText(X);
         。getControl()的setBackground(item.getBackground());
         TableEditor编辑器=新TableEditor(的GetTable());
         editor.grabHorizo​​ntal = TRUE;
         editor.grabVertical = TRUE;
         editor.setEditor(按钮,项目,参数:columnIndex);
         editor.layout();
         }
      });


解决方案

下面是示例工作版本。

 公共类TableEditorTest {    / **
     * @参数ARGS
     * /
    公共静态无效的主要(字串[] args){
        显示显示=新显示();
        壳牌=新的外壳(显示);        shell.setLayout(新FillLayout的());
        TableViewer的观众=新的TableViewer(外壳);
        。viewer.getTable()setHeaderVisible(真);
        。viewer.getTable()setLinesVisible(真);
        viewer.setContentProvider(新ArrayContentProvider());        TableColumn的列=新的TableColumn(viewer.getTable(),SWT.NONE);
        column.setText(名);
        column.setWidth(100);
        TableViewerColumn firstNameCol =新TableViewerColumn(浏览器,列);
        firstNameCol.setLabelProvider(新ColumnLabelProvider(){            @覆盖
            公共字符串的getText(Object元素){
                人P =(人)元素;                返回p.getFirstName();
            }        });        列=新的TableColumn(viewer.getTable(),SWT.NONE);
        column.setText(姓氏);
        column.setWidth(100);
        TableViewerColumn lastNameCol =新TableViewerColumn(浏览器,列);
        lastNameCol.setLabelProvider(新ColumnLabelProvider(){            @覆盖
            公共字符串的getText(Object元素){
                人P =(人)元素;                返回p.getLastName();
            }        });
        列=新的TableColumn(viewer.getTable(),SWT.NONE);
        column.setText(操作);
        column.setWidth(100);
        TableViewerColumn actionsNameCol =新TableViewerColumn(浏览器,列);
        actionsNameCol.setLabelProvider(新ColumnLabelProvider(){
            //确保在处置这些按钮时,浏览器输入的变化
            地图<对象,按钮和GT;按钮=新的HashMap<对象,按钮和GT;();
            @覆盖
            公共无效更新(ViewerCell细胞){                表项项=(表项)cell.getItem();
                Button按钮;
                如果(buttons.containsKey(cell.getElement()))
                {
                    按钮= buttons.get(cell.getElement());
                }
                其他
                {
                     按钮=新按钮((复合)cell.getViewerRow()getControl(),SWT.NONE。);
                    button.setText(删除);
                    buttons.put(cell.getElement(),按钮);
                }
                TableEditor编辑器=新TableEditor(item.getParent());
                editor.grabHorizo​​ntal = TRUE;
                editor.grabVertical = TRUE;
                editor.setEditor(按钮,项目,cell.getColumnIndex());
                editor.layout();
            }        });        人P1 =新的Person();
        p1.setFirstName(乔治);
        p1.setLastName(伯恩);        人P2 =新的Person();
        p2.setFirstName(亚当);
        p2.setLastName(Silva的);        人P3 =新的Person();
        p3.setFirstName(内森);
        p3.setLastName(兜帽);        清单<&人GT;人=新的ArrayList<&人GT;();
        persons.add(P1);
        persons.add(P2);
        persons.add(P3);        viewer.setInput(人);        shell.open();
        而(!shell.isDisposed())
        {            如果(!display.readAndDispatch())
            {
                display.sleep();
            }
        }        display.dispose();    }
    私有静态类Person
    {        字符串的firstName;
        字符串的lastName;        人()
        {        }        公共字符串的getFirstName(){
            返回的firstName;
        }        公共字符串getLastName(){
            返回lastName的;
        }        公共无效setFirstName(字符串的firstName){
            this.firstName =名字;
        }        公共无效setLastName(字符串的lastName){
            this.lastName = lastName的;
        }    }
}

Is it possible to add a remove button to a cell in a table? I have a table with 5 columns, I would like to add a 6th column. I want the 6th column to have a remove button in each row.

Example Row:

| 10002 | part | Metal | 001 | Yes | [Remove] |

That way the user can remove any unwanted rows by just clicking the button.

I have a markup column in the table and it is ComboBox. I created a class that extends EditingSupport.

Would I need to make a another class extending EditingSupport, but creating a button instead of ComboBox?

EDIT

public class AplotDataTableViewer extends TableViewer
{

    public AplotDataTableViewer(Composite parent, int style) 
    {
        super(parent, style);

        Table table = getTable();
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        table.setLayoutData(gridData);
        createColumns();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        setContentProvider(new ArrayContentProvider());
    }

    private void createColumns() {

      String[] titles = { "ItemId", "RevId", "PRL", "Dataset Name", "EC Markup" };
      int[] bounds = { 150, 150, 100, 150, 100 };

      TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0);
      col.setLabelProvider(new ColumnLabelProvider() {
         public String getText(Object element) {
            if(element instanceof AplotDataModel.AplotDatasetData)
               return ((AplotDataModel.AplotDatasetData)element).getDataset().toString();
            return super.getText(element); 
            }
         }); 

      col = createTableViewerColumn(titles[1], bounds[1], 1);
      col.setLabelProvider(new ColumnLabelProvider() {
         public String getText(Object element) {
            if(element instanceof AplotDataModel.AplotDatasetData)
               return ((AplotDataModel.AplotDatasetData)element).getRev().toString();
            return super.getText(element); 
            }
         });

      col = createTableViewerColumn(titles[2], bounds[2], 2);
      col.setLabelProvider(new ColumnLabelProvider() {
         public String getText(Object element) {
            if(element instanceof AplotDataModel.AplotDatasetData)
               return ((AplotDataModel.AplotDatasetData)element).getPRLValue().toString();
            return super.getText(element); 
            }
         });
      col = createTableViewerColumn(titles[3], bounds[3], 3);
      col.setLabelProvider(new ColumnLabelProvider() {
         public String getText(Object element) {
            if(element instanceof AplotDataModel.AplotDatasetData)
               return ((AplotDataModel.AplotDatasetData)element).getDatasetName().toString();
            return super.getText(element); 
            }
         });

       col = createTableViewerColumn(titles[4], bounds[4], 4);
       col.setLabelProvider(new ColumnLabelProvider() {
          public String getText(Object element) {
             if(element instanceof AplotDataModel.AplotDatasetData)
                return ((AplotDataModel.AplotDatasetData)element).getMarkupValue();
             return super.getText(element); 
             }
          });

       col.setEditingSupport(new OptionEditingSupport(this));

    }

    private TableViewerColumn createTableViewerColumn(String header, int width, int idx) 
    {
        TableViewerColumn column = new TableViewerColumn(this, SWT.LEFT, idx);
        column.getColumn().setText(header);
        column.getColumn().setWidth(width);
        column.getColumn().setResizable(true);
        column.getColumn().setMoveable(true);

        return column;
    }
}

EDIT

col = createTableViewerColumn(titles[5], bounds[5], 5);
   col.setLabelProvider(new ColumnLabelProvider() {
      @Override
      public void update(ViewerCell cell) {
         TableItem item = new TableItem(getTable(),SWT.NONE);
         Button button = new Button(getTable(),SWT.NONE);
         button.setText("X");
         getControl().setBackground(item.getBackground());
         TableEditor editor = new TableEditor(getTable());
         editor.grabHorizontal  = true;
         editor.grabVertical = true;
         editor.setEditor(button , item, columnIndex);
         editor.layout();
         }
      });

解决方案

Here is sample working version.

public class TableEditorTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setLayout(new FillLayout());


        TableViewer viewer = new TableViewer(shell);
        viewer.getTable().setHeaderVisible(true);
        viewer.getTable().setLinesVisible(true);
        viewer.setContentProvider(new ArrayContentProvider());

        TableColumn column = new TableColumn(viewer.getTable(), SWT.NONE);
        column.setText("First Name");
        column.setWidth(100);
        TableViewerColumn firstNameCol = new TableViewerColumn(viewer, column);
        firstNameCol.setLabelProvider(new ColumnLabelProvider(){

            @Override
            public String getText(Object element) {
                Person p = (Person)element;

                return p.getFirstName();
            }

        });

        column = new TableColumn(viewer.getTable(), SWT.NONE);
        column.setText("Last Name");
        column.setWidth(100);
        TableViewerColumn lastNameCol = new TableViewerColumn(viewer, column);
        lastNameCol.setLabelProvider(new ColumnLabelProvider(){

            @Override
            public String getText(Object element) {
                Person p = (Person)element;

                return p.getLastName();
            }

        });




        column = new TableColumn(viewer.getTable(), SWT.NONE);
        column.setText("Actions");
        column.setWidth(100);
        TableViewerColumn actionsNameCol = new TableViewerColumn(viewer, column);
        actionsNameCol.setLabelProvider(new ColumnLabelProvider(){
            //make sure you dispose these buttons when viewer input changes
            Map<Object, Button> buttons = new HashMap<Object, Button>();


            @Override
            public void update(ViewerCell cell) {

                TableItem item = (TableItem) cell.getItem();
                Button button;
                if(buttons.containsKey(cell.getElement()))
                {
                    button = buttons.get(cell.getElement());
                }
                else
                {
                     button = new Button((Composite) cell.getViewerRow().getControl(),SWT.NONE);
                    button.setText("Remove");
                    buttons.put(cell.getElement(), button);
                }
                TableEditor editor = new TableEditor(item.getParent());
                editor.grabHorizontal  = true;
                editor.grabVertical = true;
                editor.setEditor(button , item, cell.getColumnIndex());
                editor.layout();
            }

        });



        Person p1 = new Person();
        p1.setFirstName("George");
        p1.setLastName("Burne");

        Person p2 = new Person();
        p2.setFirstName("Adam");
        p2.setLastName("Silva");

        Person p3 = new Person();
        p3.setFirstName("Nathan");
        p3.setLastName("Cowl");

        List<Person> persons = new ArrayList<Person>();
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);

        viewer.setInput(persons);

        shell.open();
        while(!shell.isDisposed())
        {

            if(!display.readAndDispatch())
            {
                display.sleep();
            }
        }

        display.dispose();

    }


    private static class Person
    {

        String firstName;
        String lastName;

        Person()
        {

        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

    }


}

这篇关于SWT - TableViewer的添加删除按钮到列在表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆