package demo31; import javax.swing.*; import org.openswing.swing.client.*; import java.awt.*; import org.openswing.swing.tree.client.*; import java.awt.event.*; import org.openswing.swing.util.client.ClientSettings; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import org.openswing.swing.tree.java.OpenSwingTreeNode; import javax.swing.tree.TreeSelectionModel; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Tree Frame</p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * <p> </p> * @author Mauro Carniel * @version 1.0 */ public class TreeFrame extends JFrame { private TreePanel tree = new TreePanel(); private DefaultMutableTreeNode dragNode = null; public TreeFrame(TreeFrameController controller) { try { super.setDefaultCloseOperation(super.EXIT_ON_CLOSE); jbInit(); setTitle("Draggable Tree"); setSize(600,400); tree.setTreeController(controller); tree.setTreeDataLocator(controller); tree.setLeavesImageName("node.gif"); tree.setExpandAllNodes(true); tree.setIconAttributeName("iconImageName"); tree.setTooltipAttributeName("tooltip"); //tree.setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); tree.addPopupMenuItem("rename node",'R',true,new ActionListener() { public void actionPerformed(ActionEvent e) { TestVO vo = (TestVO)TreeFrame.this.tree.getSelectedNode().getUserObject(); String newValue = JOptionPane.showInputDialog( TreeFrame.this, ClientSettings.getInstance().getResources().getResource("new description:"), vo.getDescription() ); if (newValue!=null) vo.setDescription(newValue); } }); tree.addPopupSeparator(); tree.addPopupMenuItem("remove node",'E',true,new ActionListener() { public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode node = tree.getSelectedNode(); ((DefaultMutableTreeNode)node.getParent()).remove(node); tree.revalidateTree(); } }); tree.addPopupMenuItem("show remove command",'S',true,new ActionListener() { public void actionPerformed(ActionEvent e) { tree.setMenuItemVisible("remove node",true); tree.setMenuItemEnabled("show remove command",false); tree.setMenuItemEnabled("hide remove command",true); } }); tree.addPopupMenuItem("hide remove command",'H',true,new ActionListener() { public void actionPerformed(ActionEvent e) { tree.setMenuItemVisible("remove node",false); tree.setMenuItemEnabled("show remove command",true); tree.setMenuItemEnabled("hide remove command",false); } }); // enable drag 'n drop onto the tree... tree.enableDrag("TREE",new TreeDragNDropListener() { public boolean dragEnabled() { // drag operation has started... dragNode = (DefaultMutableTreeNode)tree.getSelectedNode(); return true; } public boolean dropEnabled(DefaultMutableTreeNode node,String treeId) { // drop has terminated... int num = JOptionPane.showOptionDialog( TreeFrame.this, ClientSettings.getInstance().getResources().getResource("which operation?"), ClientSettings.getInstance().getResources().getResource("node dropped"), JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[]{ ClientSettings.getInstance().getResources().getResource("move node"), ClientSettings.getInstance().getResources().getResource("copy node"), ClientSettings.getInstance().getResources().getResource("cancel") }, null ); if (num==0) { // move node... DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode)node.getParent(); if (parentNode!=null) { ((DefaultMutableTreeNode)dragNode.getParent()).remove(dragNode); if (((TestVO)node.getUserObject()).getCode()==null) // dropped node is a folder... node.add(dragNode); else // dropped node is a leaf... parentNode.insert(dragNode,parentNode.getIndex(node)+1); tree.repaintTree(); tree.getTree().setSelectionPath(new TreePath(dragNode.getPath())); } } else if (num==1) { // copy node... DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode)node.getParent(); if (parentNode!=null) { DefaultMutableTreeNode newNode = new OpenSwingTreeNode(dragNode.getUserObject()); if (((TestVO)node.getUserObject()).getCode()==null) // dropped node is a folder... node.add(newNode); else // dropped node is a leaf... parentNode.insert(newNode,parentNode.getIndex(node)+1); tree.repaintTree(); tree.getTree().setSelectionPath(new TreePath(newNode.getPath())); } } return true; } }); setVisible(true); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().add(tree, BorderLayout.CENTER); } }