Есть такая штука VetoableChangeListener, это слушатель который вызывается перед срабатыванием события, и может его запретить посредством выкидывания специального исключения. Вот как можно раскрывать дерево по 2-му щелчку:
| Код | public class TreeTest extends JFrame { private boolean allowExpand = false;
public TreeTest() { super("Tree test"); getContentPane().add(new JScrollPane(createTree())); setSize(640, 480); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setLocationRelativeTo(null); }
private JTree createTree() { JTree tree = new JTree(); tree.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { JTree tree = (JTree) e.getSource(); if(e.getClickCount() >= 2) { allowExpand = true; tree.expandPath(tree.getClosestPathForLocation(e.getX(), e.getY())); allowExpand = false; } } }); tree.addTreeWillExpandListener(new TreeWillExpandListener() { public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException { if(!allowExpand) throw new ExpandVetoException(event); }
public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException { } }); return tree; }
public static void main(String[] args) { TreeTest treeTest = new TreeTest(); treeTest.setVisible(true); } } | |