Adding a remove button to a column in a table

前端 未结 4 1592
小蘑菇
小蘑菇 2020-12-03 12:26

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

4条回答
  •  情深已故
    2020-12-03 13:14

    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 buttons = new HashMap();
    
    
                @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 persons = new ArrayList();
            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;
            }
    
        }
    
    
    }
    

提交回复
热议问题