You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.3 KiB
132 lines
3.3 KiB
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
|