- ベストアンサー
ノードの削除
removeAllChildren()を使って子ノードを削除させたのですが、上手く削除できません。削除はされているようなのですが、repaint()を使っても親ノードから伸びる線は消えているのですが、削除したはずのノードが残っている状態です。どうしたらよいのか分かりません。 教えてください。よろしくお願いします。
- Java
- 回答数2
- ありがとう数1
- みんなの回答 (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); } }
関連するQ&A
- js 親ノード
javascriptの Node.appendChild()の使い方に親ノード、子ノードとあるのですが これは親要素、子要素とは違うのですか? 以下引用 Node.appendChild() メソッドは、特定の親ノードの子ノードリストの末尾にノードを追加します。追加しようとしたノードが既に存在していたら、それは現在の親ノードから除かれ、新しい親ノードに追加されます(他のノードに追加する前にそのノードを親ノードから削除する必要はありません)。
- ベストアンサー
- JavaScript
- ノードの削除
フォームから送信した内容に対応するノードを DOMツリーから削除する方法が思いつかず困ってます。 var kekka = root.selectNodes(XPath); のようにして直接ノードリストを取得しています。 ●.removeChild(▲)を利用してノードが削除できることはわかるのですが、 今回の場合の、●▲に入る変数がまったく検討がつきません。
- 締切済み
- JavaScript
- 【C#】TreeViewでクリックした親ノードと、子ノードを表示させた
【C#】TreeViewでクリックした親ノードと、子ノードを表示させたい C#初心者です。 TreeView(treeView1)で親ノードをクリックしたら、その親ノード+子ノードを、別のTreeView画面(treeView2)に表示させたいのですが、やり方がわかりません。 例えば、 +A -B -C +D -E というTreeViewの場合、Aの親ノードをクリックしたら、Aの親ノードと、BとCの子ノードが、別画面(treeView2)に表示されるようにしたいです。 どなたか分かる方いらっしゃいましたら教えていただけると幸いです。 宜しくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- 新しいノード
TreeViewで新しいノードを作成した時、 その新しくできたノードを選択状態にするには どうすればいいのでしょうか? Lastノード、Nextノードを使ってみたのですが、 うまく取得できませんでした。 お願いします。 開発環境はVB.Net2003です。
- ベストアンサー
- Visual Basic
- C# TreeViewのノードの判定
TreeViewでクリックしたノードの位置が親ノード(+の位置)かそれとも配下の子ノード なのか判定することはできますでしょうか。
- ベストアンサー
- C・C++・C#
- VB2005 TreeViewの任意ノード選択
お世話になっております。 VB2005でWinアプリを開発中です。 ルートノードは1つで、 そこから子、孫、ひ孫・・・と階段状になるTreeViewを作っています。 親 L子 L孫 Lひ孫 ・・・・ このようなツリーに対し、プログラムで任意のノードを選択状態にしたいのですが、 ノードの名称などで一発で指定する方法はありますでしょうか?? 上の例で、「孫」を選択状態にしたい場合、 TreeView1.SelectedNode = TreeView1.Nodes(0).Nodes(0).Nodes(0) と書けば、できることはできるのですが。 他にもっとよい方法があるはずと思うのですが、見つけられませんでした。 VB6.0なら、下記に方法があったのですが・・・ http://oshiete1.goo.ne.jp/qa732490.html よろしくお願いします。
- ベストアンサー
- Visual Basic
- C# TreeView 効率良いノード追加の仕方
C# TreeViewについて質問させてください。 ノード(子ノード含む)を数万件以上登録する際に、効率の良い方法を教えて頂けないでしょうか? 実際のコードとは異なりますが、大まかに以下のような処理をメインスレッドで行っています。 class MyTreeNode : TreeNode{ void AddNode(){ BeginUpdate(); SuspendLayout(); foreach( var 親ノード情報 in 親ノード情報リスト ){ TreeNode parentNode = new TreeNode( 親ノード名 ); foreach( var 子ノード情報 in 子ノード情報リスト ){ TreeNode childNode = new TreeNode( 子ノード名); parentNode.Nodes.Add( childNode ); } this.Nodes.Add( parentNode ); } ResumeLayout(); EndUpdate(); } } この方法ですと、かなり時間がかかってしまい、UIが固まったようになってしまいます。 (TreeViewに、子ノードの一斉展開機能が必要なので、親ノード展開時のイベントを拾って 子ノードを追加する方法は上記と同じく遅くなってしまうのではと思っていますがどうなんでしょうか?)
- ベストアンサー
- その他(プログラミング・開発)
- FreeMind 子供の上のノードだけ消したい
上記の件でお願いします。 ソフトに入力中に、よく間違えて、 余分に子ノードを作成してしまいます。 (画像貼っってあります) 1-3を残して、上の親ノードだけを切り取る方法はありませんか? 教えてください。よろしくお願いいたします。 (専門用語の使い方が間違っていたらスミマセン)
- ベストアンサー
- フリーウェア・フリーソフト
- ツリーのあるノードだけ選択できないようにしたい
こんばんは。 ツリー表示において特定のノード(具体的には子ノードを持っていないノード)のみ選択できないようにしたいと考えていますが、やり方がいまいちわかりません。 DefaultTreeModelを使ってどうにかできるのでしょうか? 宜しくお願いします。
- ベストアンサー
- Java
お礼
ありがとうございました。 reload()を使ったら上手くいきました。