- ベストアンサー
JTreeのノード削除方法とフォルダーの設定について
- JTreeを使ってプログラムを作成中ですが、removeSelectionRow()で要素を削除してもreload()しても消えません。
- sasadoraさんのサンプルプログラムで表わされているフォルダーの開閉状態を表すデザインについて設定方法を教えてください。
- JTreeでの要素の削除やフォルダーの設定方法についての質問です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1.について removeSelectionRowは、指定したindexの“選択”を 解除するするメソッドです。 ノードを選択すると反転表示されますよね?それを解除するメソッドです。 ノードを消すには、 MutableTreeNode#remove() MutableTreeNode#removeFromParent() DefaultTreeModel#removeNodeFromParent(MutableTreeNode node) を使うといいと思います。 2. これは、Look&Feelの設定のことだと思います。 UIManager#setLookAndFeelで設定可能です。 Windows環境ならgetSystemLookAndFeelClassNameで システムのLook&Feelを取得すればOKです。 サンプルを選択したノードを削除するようにして、 システムのLook&Feelを取得するようにしてみました。 ======================================== import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; public class TreeTest extends JFrame{ JTree tree = new JTree(); JButton btn = new JButton("remove"); DefaultMutableTreeNode top = null; DefaultTreeModel model = null; static { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { } } public static void main(String[] args){ new TreeTest().show(); } public TreeTest(){ this.setSize(200, 200); top = new DefaultMutableTreeNode("Top"); top.add(new DefaultMutableTreeNode("Child1")); top.add(new DefaultMutableTreeNode("Child2")); top.add(new DefaultMutableTreeNode("Child3")); model = new DefaultTreeModel(top); tree.setModel(model); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ TreePath path = tree.getSelectionPath(); if (path != null){ ((DefaultMutableTreeNode)path.getLastPathComponent()).removeFromParent(); } ((DefaultTreeModel)tree.getModel()).reload(); } }); this.getContentPane().add(tree, BorderLayout.CENTER); this.getContentPane().add(btn, BorderLayout.SOUTH); } } ========================================
お礼
できました。 とっても、ありがとうございました。