Author: tchemit Date: 2009-10-04 12:12:06 +0200 (Sun, 04 Oct 2009) New Revision: 1556 Modified: trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java Log: add usefull addExpandOnClickListener method Modified: trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java =================================================================== --- trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java 2009-10-04 08:57:25 UTC (rev 1555) +++ trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java 2009-10-04 10:12:06 UTC (rev 1556) @@ -19,6 +19,7 @@ import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.SwingUtilities; +import javax.swing.event.TreeSelectionEvent; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; @@ -50,7 +51,10 @@ import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.HyperlinkEvent; +import javax.swing.event.TreeSelectionListener; import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.tree.TreeNode; +import javax.swing.tree.TreePath; import jaxx.runtime.swing.BooleanCellRenderer; import jaxx.runtime.swing.DecoratorTableCellRenderer; import jaxx.runtime.swing.EmptyNumberTableCellRenderer; @@ -755,4 +759,37 @@ } }); } + + /** + * Add a listener of tree selection model to expand a new selected node + * when it is selected. + * + * @param tree the tree to treate + */ + public static void addExpandOnClickListener(final JTree tree) { + + tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { + + @Override + public void valueChanged(final TreeSelectionEvent e) { + TreeNode node = (TreeNode) e.getPath().getLastPathComponent(); + if (node != null && !node.isLeaf()) { + + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (TreePath path : e.getPaths()) { + if (e.isAddedPath(path) && !tree.isExpanded(path)) { + log.info("expand node [" + path + "]"); + // will expand the node + tree.expandPath(path); + } + } + } + }); + } + } + }); + } }