• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:質問 No.321331 「ノードの削除」の回答(sasadoraさん)を見て。。)

JTreeのノード削除方法とフォルダーの設定について

このQ&Aのポイント
  • JTreeを使ってプログラムを作成中ですが、removeSelectionRow()で要素を削除してもreload()しても消えません。
  • sasadoraさんのサンプルプログラムで表わされているフォルダーの開閉状態を表すデザインについて設定方法を教えてください。
  • JTreeでの要素の削除やフォルダーの設定方法についての質問です。

質問者が選んだベストアンサー

  • ベストアンサー
  • sasadora
  • ベストアンサー率68% (59/86)
回答No.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);   } } ========================================

pikodon
質問者

お礼

できました。 とっても、ありがとうございました。

関連するQ&A