package de.memtext.dlg; import java.awt.Dimension; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeNode; import de.memtext.util.WindowUtils; /** * A dialog that presents a tree and allows the selection of * one node or to clear the selection */ public class NodeSelectionDlg extends OkCancelClearDlg { private JTree tree; private Object selectedNode = null; private String title; public NodeSelectionDlg(Frame owner, String title, JTree tree) { super(owner, title); this.tree = tree; this.title = title; this.setCenter(new JScrollPane(tree)); selectedNode = null; if (tree.getLastSelectedPathComponent() != null) selectedNode = (TreeNode) tree.getLastSelectedPathComponent(); this.pack(); WindowUtils.center(this); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent we) { exit(); } }); } /** * called if window is closed, does nothing by default, * subclasses can override * */ @Override protected void exit() { } public NodeSelectionDlg(Frame owner, String title, DefaultTreeModel treeModel) { this(owner, title, new JTree(treeModel)); } public NodeSelectionDlg(Frame owner, String title, TreeNode node) { this(owner, title, new JTree(node)); } /** * can be overriden by subclasses to perform a check if * the selected node is OK * @return */ protected boolean isSelectedNodeOk(TreeNode testme) { return true; } @Override protected void performOk() { if (!isSelectedNodeOk((TreeNode) tree.getLastSelectedPathComponent())) return; selectedNode = tree.getLastSelectedPathComponent(); this.setVisible(false); } @Override protected void performCancel() { this.setVisible(false); } public TreeNode getSelectedNode() { return selectedNode == null ? null : (TreeNode) selectedNode; } @Override protected void performClear() { selectedNode = null; tree.clearSelection(); this.setVisible(false); } @Override public void setSize(Dimension dim) { super.setSize(dim); WindowUtils.center(this); } @Override public void setSize(int x, int y) { super.setSize(x, y); WindowUtils.center(this); } public static void main(String a[]) { NodeSelectionDlg t = new NodeSelectionDlg(null, "adsf", new JTree()); t.pack(); t.show(); System.out.println(t.getSelectedNode()); t.show(); System.out.println(t.getSelectedNode()); } public void setNode(TreeNode node) { tree.setModel(new DefaultTreeModel(node)); selectedNode = null; } public void setCellRenderer(TreeCellRenderer renderer) { tree.setCellRenderer(renderer); } @Override public String getTitle() { return title; } public String getInfoText() { return title; } } //Created on 17.11.2003