package org.trianacode.gui.hci.tools; import org.trianacode.gui.hci.GUIEnv; import org.trianacode.taskgraph.tool.Toolbox; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @author Andrew Harrison * @version 1.0.0 Oct 27, 2010 */ public class PackageTree extends JDialog implements ActionListener { private JTree tree; private PackageTreeModel model; private JButton okBut; private JButton cancelBut; private String pkge = null; public PackageTree(Toolbox box) { super(GUIEnv.getApplicationFrame(), "Choose A Package", true); setResizable(false); this.model = new PackageTreeModel(box); init(); } private void init() { this.tree = new JTree(model); DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); renderer.setLeafIcon(renderer.getClosedIcon()); tree.setCellRenderer(renderer); JPanel pane = new JPanel(new BorderLayout()); JScrollPane scroll = new JScrollPane(tree, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setPreferredSize(new Dimension(300, 400)); pane.add(scroll, BorderLayout.CENTER); pane.setBorder(new EmptyBorder(3, 3, 3, 3)); getContentPane().add(pane, BorderLayout.CENTER); JPanel butPane = new JPanel(new BorderLayout()); okBut = new JButton("OK"); okBut.addActionListener(this); cancelBut = new JButton("Cancel"); cancelBut.addActionListener(this); butPane.add(okBut, BorderLayout.WEST); butPane.add(cancelBut, BorderLayout.EAST); butPane.setBorder(new EmptyBorder(3, 3, 3, 3)); getContentPane().add(butPane, BorderLayout.SOUTH); pack(); } public String showPackages() { setLocationRelativeTo(getOwner()); setVisible(true); return pkge; } @Override public void actionPerformed(ActionEvent e) { Object src = e.getSource(); if (src == cancelBut) { setVisible(false); } else if (src == okBut) { TreePath path = tree.getAnchorSelectionPath(); Object[] comps = path.getPath(); StringBuilder sb = new StringBuilder(); int len = comps.length; if (len < 2) { setVisible(false); dispose(); return; } for (int i = 1; i < comps.length - 1; i++) { Object comp = comps[i]; sb.append(comp.toString()).append("."); } sb.append(comps[comps.length - 1]); this.pkge = sb.toString(); setVisible(false); dispose(); } } }