import java.awt.*; import javax.swing.*; import javax.swing.tree.*; import javax.swing.event.*; import java.awt.event.*; public class Test { public static void main (String[] args) { Win win = new Win("Test Window"); } } /*******************/ /* クラスWinの定義 */ /*******************/ class Win extends JFrame implements ActionListener { DefaultTreeModel model; JTree tree; JButton add_b, del_b; /******************/ /* コンストラクタ */ /******************/ Win (String name) { // Frameクラスのコンストラクタ(Windowのタイトルを引き渡す) super(name); // 木構造データの作成 Font f = new Font("MS 明朝", Font.PLAIN, 20); DefaultMutableTreeNode root = new DefaultMutableTreeNode("生物"); DefaultMutableTreeNode dobutu = new DefaultMutableTreeNode("動物"); root.add(dobutu); DefaultMutableTreeNode inu = new DefaultMutableTreeNode("犬"); dobutu.add(inu); DefaultMutableTreeNode neko = new DefaultMutableTreeNode("猫"); dobutu.add(neko); DefaultMutableTreeNode shokubutu = new DefaultMutableTreeNode("植物"); root.add(shokubutu); DefaultMutableTreeNode sakura = new DefaultMutableTreeNode("桜"); shokubutu.add(sakura); DefaultMutableTreeNode ajisai = new DefaultMutableTreeNode("紫陽花"); shokubutu.add(ajisai); DefaultMutableTreeNode asagao = new DefaultMutableTreeNode("朝顔"); shokubutu.add(asagao); // 木構造を生成 model = new DefaultTreeModel((TreeNode)root); tree = new JTree(model); tree.setFont(f); tree.setEditable(true); tree.putClientProperty("JTree.lineStyle", "Angled"); // ノード間を結ぶ getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER); // パネルの追加 JPanel pn = new JPanel(); add_b = new JButton("追加"); add_b.setFont(f); add_b.addActionListener(this); pn.add(add_b); del_b = new JButton("削除"); del_b.setFont(f); del_b.addActionListener(this); pn.add(del_b); getContentPane().add(pn, BorderLayout.SOUTH); // Windowの大きさ setSize(200, 200); // ウィンドウを表示 setVisible(true); // イベントアダプタ addWindowListener(new WinEnd()); } /******************************/ /* 上,左,下,右の余白の設定 */ /******************************/ public Insets getInsets() { return new Insets(35, 10, 10, 10); } /******************************/ /* ボタンが押されたときの処理 */ /******************************/ public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode sn = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if (sn != null) { // 子供の追加 if (e.getSource() == add_b) { // 追加 DefaultMutableTreeNode nn = new DefaultMutableTreeNode("New"); model.insertNodeInto(nn, sn, sn.getChildCount()); // 表示 TreeNode nodes[] = model.getPathToRoot(nn); TreePath path = new TreePath(nodes); tree.scrollPathToVisible(path); // スクロールペインに含まれていないときは // tree.makeVisible(path); // でよい } // ノードの削除 else if (e.getSource() == del_b) { if (sn.getParent() != null) model.removeNodeFromParent(sn); } } } /************/ /* 終了処理 */ /************/ class WinEnd extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } }