Hi Indukumar, Please see: http://lists.canoo.com/mailman/private/ulc-developer/2006/004486.html
Thanks and regards, Janak >-----Original Message----- >From: [EMAIL PROTECTED] >[mailto:[EMAIL PROTECTED] Behalf Of Indukumar >Vellapillil H. (KSDE 211) >Sent: Wednesday, September 06, 2006 8:27 PM >To: [email protected] >Subject: [ULC-developer] ULCTableTree: Value Changed Event >(tableTreeNodesChanged) is not synchronous > > >Hi, > >I am using a ULCTableTree. In it, I have a checkbox in an editable cell. >I wish to be informed of any changes to the checkbox's state. But with >ULC, the change of state is not conveyed immediately. That is, the event >is propogated to the server only AFTER some other GUI event has >triggered a server roundtrip. I am attaching a sample application >demonstrating the problem. > >Environment: >- ULC Version: 6.1.1 >- Java: 1.4.2 on both client and server. > >To reproduce the problem: >1. Please run the following application and click the checkboxes a few >times. Nothing happens. >2. Close the application, and the text "Nodes changed!!!!" gets printed. > >Right now, the workaround I am using is to add dummy listeners >'IListSelectionListener' and 'ITreeSelectionListener' to the >ULCTableTree to force a server roundtrip. But this does not satisfy some >complex use cases. It would be highly desirable that either a bug fix is >done or a workaround to this issue is provided. > >Thanks and Regards >Indukumar > >X---------------------------------- > > >import com.ulcjava.base.application.AbstractApplication; >import com.ulcjava.base.application.DefaultCellEditor; >import com.ulcjava.base.application.IEditorComponent; >import com.ulcjava.base.application.IRendererComponent; >import com.ulcjava.base.application.ULCCheckBox; >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.DefaultTableTreeModel; >import com.ulcjava.base.application.tabletree.ITableTreeCellRenderer; >import com.ulcjava.base.development.DevelopmentRunner; > >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"}, > new boolean[] {false, false, true}, false); > DefaultMutableTableTreeNode row1 = new >DefaultMutableTableTreeNode(new Object[] {"AAA", "BBB", "CCC"}, > new boolean[] {false, false, true}, false); > DefaultMutableTableTreeNode row1a = new >DefaultMutableTableTreeNode(new Object[] {"aaa", "bbb", "ccc"}, > new boolean[] {false, false, true}, true); > DefaultMutableTableTreeNode row2 = new >DefaultMutableTableTreeNode(new Object[] {"DDD", "EEE", "FFF"}, > new boolean[] {false, false, true}, false); > DefaultMutableTableTreeNode row2a = new >DefaultMutableTableTreeNode(new Object[] {"ddd", "eee", "fff"}, > new boolean[] {false, false, true}, true); > > row1.add(row1a); > row2.add(row2a); > > root.add(row1); > root.add(row2); > > DefaultTableTreeModel model = new >DefaultTableTreeModel(root, new String[] {"As", "Bs", "Cs"}); > > model.setRoot(root); > > ULCTableTree tree = new ULCTableTree(model); > tree.setRootVisible(false); > tree.setShowsRootHandles(true); > > for (int i = 0; i < 5; i++) { > // Will you add a method in the ULCTableTree to >expand all nodes in > // future? > tree.expandRow(i); > } > > final ULCCheckBox checkBox = new ULCCheckBox(); > tree.getColumnModel().getColumn(2).setCellEditor(new >DefaultCellEditor(checkBox) { > > public IEditorComponent >getTableTreeCellEditorComponent(ULCTableTree tableTree, Object value, > boolean selected, boolean expanded, >boolean leaf, Object node) { > > return checkBox; > } > }); > > tree.getColumnModel().getColumn(2).setCellRenderer(new >ITableTreeCellRenderer() { > > public IRendererComponent >getTableTreeCellRendererComponent(ULCTableTree arg0, Object arg1, >boolean arg2, > boolean arg3, boolean arg4, boolean >arg5, Object arg6) { > > return checkBox; > } > }); > > model.addTableTreeModelListener(new >ITableTreeModelListener() { > > public void >tableTreeStructureChanged(TableTreeModelEvent event) { > > } > > public void >tableTreeNodeStructureChanged(TableTreeModelEvent event) { > > } > > public void >tableTreeNodesInserted(TableTreeModelEvent event) { > > } > > public void >tableTreeNodesRemoved(TableTreeModelEvent event) { > > } > > public void >tableTreeNodesChanged(TableTreeModelEvent event) { > > /* > * This method gets called only AFTER >the window is closed! It > * seems that the valueChanged events >are not synchronous. > */ > System.out.println("Nodes changed!!!!"); > } > }); > > frame.add(new ULCScrollPane(tree)); > frame.setVisible(true); > } > > public static void main(String[] args) { > > >DevelopmentRunner.setApplicationClass(ULCTableTreeTest.class); > DevelopmentRunner.run(); > } >} > >X---------------------------------- >_______________________________________________ >ULC-developer mailing list >[email protected] >http://lists.canoo.com/mailman/listinfo/ulc-developer _______________________________________________ ULC-developer mailing list [email protected] http://lists.canoo.com/mailman/listinfo/ulc-developer
