Hi Carsten,

You need not set an Editor Renderer merely to make the cells editable.

You can do this by setting/overriding the isCellEditable of
DefaultMutableTableTreeNode.

The values changed in the Cell Editor will be automatically flushed to the
server. You can determine the mode of flushing to be synchronous or deferred
or asynch using:

        ClientContext.setModelUpdateMode(model,
UlcEventConstants.SYNCHRONOUS_MODE);

Please see the snippet at the end of this mail.

I hope this helps.

Thanks and regards,

Janak


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Keuch, Carsten
Sent: Tuesday, September 05, 2006 3:07 PM
To: Ulc-Developer (E-Mail)
Subject: [ULC-developer] Editable Cells in TableTree


Hi all,

i have implemented a Tabletree and want some cells of a column to be
editable to flush later into database. For this issue i implement a
CellEditor and CellRenderer as listed below. But now i'm running into
difficulties. The ULCTextField implements the IEditorComponent indeed but
not the IRendererComponent and 'cause of that a ClassCastException is thrown
by execution (both components are added to the table). On the other hand,
when i try the same with an ULCLabel, the super constructor of
DefaultCellEditor is undefined for ULCLable ('cause not implementing the
IEditorComponent interface) but implements IRendererComponent instead!?!?!
How can i solve this or how can i edit cells in an other way?
My second question is, how i can get then the edited values and flush them
into db by clicking on a button for example? Pls see the snippet below.

Thanks and kind regards,

    Carsten...



private static class CellEditor extends DefaultCellEditor {

  public CellEditor(ULCTextField field) {
   super(field);
  }

  public IEditorComponent getTableTreeCellEditorComponent(
    ULCTableTree tableTree, Object value, boolean selected,
    boolean expanded, boolean leaf, Object node) {
   ULCTextField field = (ULCTextField) getEditorComponent();
   // field.setText((String) node);
   return field;
  }

 }

 private static class CellRenderer extends ULCTextField implements
   ITableTreeCellRenderer {

  public IRendererComponent getTableTreeCellRendererComponent(
    ULCTableTree tableTree, Object value, boolean selected,
    boolean hasFocus, boolean expanded, boolean leaf, Object node) {
   // setText((String) node);
   return (IRendererComponent) this;
  }

 }

--------------------


import com.ulcjava.base.application.AbstractApplication;
import com.ulcjava.base.application.ClientContext;
import com.ulcjava.base.application.ULCBorderLayoutPane;
import com.ulcjava.base.application.ULCFrame;
import com.ulcjava.base.application.ULCScrollPane;
import com.ulcjava.base.application.ULCTableTree;
import com.ulcjava.base.application.event.ITableTreeModelListener;
import com.ulcjava.base.application.event.TableTreeModelEvent;
import com.ulcjava.base.application.tabletree.DefaultMutableTableTreeNode;
import com.ulcjava.base.application.tabletree.DefaultTableTreeCellRenderer;
import com.ulcjava.base.application.tabletree.DefaultTableTreeModel;
import com.ulcjava.base.application.tabletree.ULCTableTreeColumnModel;
import com.ulcjava.base.application.util.Color;
import com.ulcjava.base.development.DevelopmentRunner;
import com.ulcjava.base.shared.IDefaults;
import com.ulcjava.base.shared.UlcEventConstants;

public class ULCTableTreeTest extends AbstractApplication {
    public void start() {
        ULCFrame frame = new ULCFrame();
        frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);

        DefaultMutableTableTreeNode root = new DefaultMutableTableTreeNode(
                new Object[] { "root", "root", "root" }, false);
        DefaultMutableTableTreeNode node1 = new DefaultMutableTableTreeNode(
                new Object[] { "Offer", "Total",
                        "Total % " }, true);

        // note the second arg: it sets isCellEditable for the node
        DefaultMutableTableTreeNode node2 = new DefaultMutableTableTreeNode(
                new Object[] { "AAAA", "13605", "16.84" }, new boolean[]
{true, true, true }, false);
        DefaultMutableTableTreeNode node3 = new DefaultMutableTableTreeNode(
                new Object[] { "BBBBB", "xx", "yy" }, true);
        DefaultMutableTableTreeNode node4 = new DefaultMutableTableTreeNode(
                new Object[] { "CCCC", "11", "0.01" }, new boolean[] {true,
true, true }, false);
        DefaultMutableTableTreeNode node5 = new DefaultMutableTableTreeNode(
                new Object[] { "DDDD", "zz", "vv" }, true);

        node2.add(node3);
        node4.add(node5);

        root.add(node1);
        root.add(node2);
        root.add(node4);

        DefaultTableTreeModel model = new DefaultTableTreeModel(root,
                new String[] { "col1", "col2", "col3" });

        model.setRoot(root);

        // Listens to model changes
        model.addTableTreeModelListener(new ITableTreeModelListener() {

                        public void 
tableTreeNodeStructureChanged(TableTreeModelEvent event) {
                        }

                        public void tableTreeNodesChanged(TableTreeModelEvent 
event) {
                                System.out.println("Tree node changed");
                        }

                        public void tableTreeNodesInserted(TableTreeModelEvent 
event) {

                        }

                        public void tableTreeNodesRemoved(TableTreeModelEvent 
event) {

                        }

                        public void 
tableTreeStructureChanged(TableTreeModelEvent event) {
                        }

        });
        ULCTableTree tree = new ULCTableTree(model);
        tree.setRootVisible(false);
        tree.setShowsRootHandles(true);

        // Sends model update event synchronously
        ClientContext.setModelUpdateMode(model,
UlcEventConstants.SYNCHRONOUS_MODE);
        tree.setSelectionBackground(Color.white);

        ULCTableTreeColumnModel cm = tree.getColumnModel();

        cm.getColumn(0).setCellRenderer(new MyCellRenderer(IDefaults.LEFT));
        cm.getColumn(1).setCellRenderer(new
MyCellRenderer(IDefaults.RIGHT));
        cm.getColumn(2).setCellRenderer(new
MyCellRenderer(IDefaults.RIGHT));


        frame.getContentPane().add(new ULCScrollPane(tree ),
ULCBorderLayoutPane.CENTER);



        frame.pack();
        frame.setLocation(300, 400);
        frame.setSize(700, 300);
        frame.setVisible(true);
    }

    class MyCellRenderer extends DefaultTableTreeCellRenderer {
        public MyCellRenderer(int alignment) {
            super();
            setHorizontalAlignment(alignment);
        }
    }

    public static void main(String[] args) {
        DevelopmentRunner.setApplicationClass(ULCTableTreeTest.class);
        DevelopmentRunner.run();
    }
}

_______________________________________________
ULC-developer mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/ulc-developer

Reply via email to