アプリ版:「スタンプのみでお礼する」機能のリリースについて

回答者:sasadoraさんのサンプルプログラムと参考URLを
見ながら、JTreeを使ってプログラムを作っています。

そこで質問なのですが、
1.removeSelectionRow(index)で、削除する要素を指定して、
その後、reload()しても指定した要素は消えていません。
その為、removeAllChildren()で一旦全部消して、再度treeを
作りました。removeSelectionRow()の後、reload()してもダメなのでしょうか?

2.sasadoraさんのサンプルプログラムのTopのフォルダー(青色)を、
参考URLにあるような黄色の開いたり閉じたりした状態を表わすフォルダー
にしたいのですが、どのような設定をすればいいのでしょうか?

宜しくお願い致します。

A 回答 (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);
  }
}
========================================
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/16 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!