- PR -

JTreeに関してなのですが

1
投稿者投稿内容
doo
会議室デビュー日: 2006/02/04
投稿数: 7
投稿日時: 2006-02-04 11:06
まだJavaを初めて間もなく、つまらない質問かと思いますが宜しくお願いします。

JTreeに関しての質問のですが、ツリーの項目を他のイベント(他のウィンドウでの)から呼び出してフォーカスをあてる、または選択した状態(外観だけ)にするのってどうしたらいいのでしょうか?
てつ
会議室デビュー日: 2005/02/15
投稿数: 3
お住まい・勤務地: 埼玉県
投稿日時: 2006-02-06 10:16
JTreeのノードを選択するには、
・行のインデックスを指定する setSelectionRow(int)
・パスを指定する setSelectionPath(TreePath)
といった方法があります。

後者の場合、TreeNode に DefaultMutableTreeNode を使っているなら、

JTree tree = ...; // 対象のJTree
DefaultMutableTreeNode node = ...; // 選択したいノード
TreePath path = new TreePath(node.getPath());
tree.setSelectionPath(path);

のような感じでできると思います。
doo
会議室デビュー日: 2006/02/04
投稿数: 7
投稿日時: 2006-02-06 12:29
>てつさん
 ありがとうございます!setSelectionPath(TreePath)を使うのは理解できていたんですがそこまでどうもっていくか悩んでました。もうちょっと自分で考えるようにします、すいません汗
doo
会議室デビュー日: 2006/02/04
投稿数: 7
投稿日時: 2006-02-06 15:06
JTree tree = ...; // 対象のJTree
DefaultMutableTreeNode node = ...; // 選択したいノード
TreePath path = new TreePath(node.getPath());
tree.setSelectionPath(path);

でやってみたのですが、選択時のようなマークがされませんでした…

なのでsetSelectionRow(int)でやっても無理でした。ツリーのウィンドウにパネルで項目の名前を表示させているのですが、それは表示できます。これはどういうことなんでしょうか?
現在のソースの状態です。argPが項目を選択した状態にしたいオブジェクトです。

DefaultMutableTreeNode pPath = new DefaultMutableTreeNode(argP);
Object pathArray[] = pPath.getPath();
TreePath path = new TreePath(pathArray);
tree.setSelectionPath(path);

どうしたらよいでしょうか?アドバイスいて頂けたらと思います。

[ メッセージ編集済み 編集者: doo 編集日時 2006-02-06 15:25 ]

[ メッセージ編集済み 編集者: doo 編集日時 2006-02-06 17:16 ]
てつ
会議室デビュー日: 2005/02/15
投稿数: 3
お住まい・勤務地: 埼玉県
投稿日時: 2006-02-06 18:19
> 現在のソースの状態です。argPが項目を選択した状態にしたいオブジェクトです。
> DefaultMutableTreeNode pPath = new DefaultMutableTreeNode(argP);

pPath は実際に JTree に設定されている TreeModel のノードでなければ
うまく行かないかと。。。

JTree で表示しているノードを
new DefaultMutableTreeNode(argP);
のように作っているなら、TreeModel が持つノードの中から
ノードの userObject と argP が一致するものを探して使います。

コード:
JTree tree = ...;
TreeModel treeModel = ...;
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) treeModel.getRoot();
for (Enumeration nodeEnum = rootNode.preorderEnumeration(); nodeEnum.hasMoreElements();) {
  DefaultMutableTreeNode node = (DefaultMutableTreeNode) nodeEnum.nextElement();
  Object userObject = node.getUserObject();
  // argP のクラスで equals() が実装されていることが前提。
  if (userObject != null && argP.equals(userObject)) {
    TreePath treePath = new TreePath(node.getPath());
    tree.setSelectionPath(treePath);
    break;
  }
}


doo
会議室デビュー日: 2006/02/04
投稿数: 7
投稿日時: 2006-02-06 19:06
>てつさん
ご丁寧にありがとうございます。その方法で考えて見ます。

public Component getTreeCellRendererComponent(JTree tree, Object value,boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus){

の呼び出しの際にrowの値をいったん保持する形を考えていました。これは少し強引ですよね…


内容も理解できて解決もしました!ありがとうございました!

[ メッセージ編集済み 編集者: doo 編集日時 2006-02-07 10:33 ]
1

スキルアップ/キャリアアップ(JOB@IT)