- ベストアンサー
ノードの削除
removeAllChildren()を使って子ノードを削除させたのですが、上手く削除できません。削除はされているようなのですが、repaint()を使っても親ノードから伸びる線は消えているのですが、削除したはずのノードが残っている状態です。どうしたらよいのか分かりません。 教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どういう環境で動かしているのか、分からないのですが、 javax.swing.JTreeを使っているんですよね。 TreeModelにDefaultTreeModelを使っているときは、 reload()を使うと、再描画されました。 例:((DefaultTreeModel)tree.getModel()).reload(); JTreeは難しいですが、がんばってください。 英語ですが、sunのチュートリアルが参考になると思います。
その他の回答 (1)
- sasadora
- ベストアンサー率68% (59/86)
私が試してみたサンプルです。 ======================================== import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; public class Test extends JFrame{ JTree tree = new JTree(); JButton btn = new JButton("remove"); DefaultMutableTreeNode top = null; DefaultTreeModel model = null; public static void main(String[] args){ new Test().show(); } public Test(){ 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){ top.removeAllChildren(); ((DefaultTreeModel)tree.getModel()).reload(); } }); this.getContentPane().add(tree, BorderLayout.CENTER); this.getContentPane().add(btn, BorderLayout.SOUTH); } }
お礼
ありがとうございました。 reload()を使ったら上手くいきました。