Class TreeEditor


  • public class TreeEditor
    extends ControlEditor
    A TreeEditor is a manager for a Control that appears above a cell in a Tree and tracks with the moving and resizing of that cell. It can be used to display a text widget above a cell in a Tree so that the user can edit the contents of that cell. It can also be used to display a button that can launch a dialog for modifying the contents of the associated cell.

    Here is an example of using a TreeEditor:

    
            final Tree tree = new Tree(shell, SWT.BORDER);
            for (int i = 0; i < 3; i++) {
                    TreeItem item = new TreeItem(tree, SWT.NONE);
                    item.setText("item " + i);
                    for (int j = 0; j < 3; j++) {
                            TreeItem subItem = new TreeItem(item, SWT.NONE);
                            subItem.setText("item " + i + " " + j);
                    }
            }
    
            final TreeEditor editor = new TreeEditor(tree);
            //The editor must have the same size as the cell and must
            //not be any smaller than 50 pixels.
            editor.horizontalAlignment = SWT.LEFT;
            editor.grabHorizontal = true;
            editor.minimumWidth = 50;
    
            tree.addSelectionListener(new SelectionAdapter() {
                    public void widgetSelected(SelectionEvent e) {
                            // Clean up any previous editor control
                            Control oldEditor = editor.getEditor();
                            if (oldEditor != null) oldEditor.dispose();
    
                            // Identify the selected row
                            TreeItem item = (TreeItem)e.item;
                            if (item == null) return;
    
                            // The control that will be the editor must be a child of the Tree
                            Text newEditor = new Text(tree, SWT.NONE);
                            newEditor.setText(item.getText());
                            newEditor.addModifyListener(new ModifyListener() {
                                    public void modifyText(ModifyEvent e) {
                                            Text text = (Text)editor.getEditor();
                                            editor.getItem().setText(text.getText());
                                    }
                            });
                            newEditor.selectAll();
                            newEditor.setFocus();
                            editor.setEditor(newEditor, item);
                    }
            });
     
    See Also:
    TreeEditor snippets, Sample code and further information
    • Constructor Detail

      • TreeEditor

        public TreeEditor​(Tree tree)
        Creates a TreeEditor for the specified Tree.
        Parameters:
        tree - the Tree Control above which this editor will be displayed
    • Method Detail

      • dispose

        public void dispose()
        Removes all associations between the TreeEditor and the row in the tree. The tree and the editor Control are not disposed.
        Overrides:
        dispose in class ControlEditor
      • getColumn

        public int getColumn()
        Returns the zero based index of the column of the cell being tracked by this editor.
        Returns:
        the zero based index of the column of the cell being tracked by this editor
        Since:
        3.1
      • getItem

        public TreeItem getItem()
        Returns the TreeItem for the row of the cell being tracked by this editor.
        Returns:
        the TreeItem for the row of the cell being tracked by this editor
      • setColumn

        public void setColumn​(int column)
        Sets the zero based index of the column of the cell being tracked by this editor.
        Parameters:
        column - the zero based index of the column of the cell being tracked by this editor
        Since:
        3.1
      • setItem

        public void setItem​(TreeItem item)
        Specifies the TreeItem that is to be edited.
        Parameters:
        item - the item to be edited
      • setEditor

        public void setEditor​(Control editor,
                              TreeItem item,
                              int column)
        Specify the Control that is to be displayed and the cell in the tree that it is to be positioned above.

        Note: The Control provided as the editor must be created with its parent being the Tree control specified in the TreeEditor constructor.

        Parameters:
        editor - the Control that is displayed above the cell being edited
        item - the TreeItem for the row of the cell being tracked by this editor
        column - the zero based index of the column of the cell being tracked by this editor
        Since:
        3.1
      • setEditor

        public void setEditor​(Control editor)
        Description copied from class: ControlEditor
        Specify the Control that is to be displayed.

        Note: The Control provided as the editor must be created with its parent being the Composite specified in the ControlEditor constructor.

        Overrides:
        setEditor in class ControlEditor
        Parameters:
        editor - the Control that is displayed above the composite being edited
      • setEditor

        public void setEditor​(Control editor,
                              TreeItem item)
        Specify the Control that is to be displayed and the cell in the tree that it is to be positioned above.

        Note: The Control provided as the editor must be created with its parent being the Tree control specified in the TreeEditor constructor.

        Parameters:
        editor - the Control that is displayed above the cell being edited
        item - the TreeItem for the row of the cell being tracked by this editor
      • layout

        public void layout()
        Description copied from class: ControlEditor
        Lays out the control within the underlying composite. This method should be called after changing one or more fields to force the Editor to resize.
        Overrides:
        layout in class ControlEditor