1

2 つのエントリに同じアイコンがあるかどうかを確認するために Fest を使用しています。

私は実際に、そのパスで特定のエントリにアクセスできるものから、JTreeFixture を持っています。

JTreeFixture tree = getTreeFromWindow();
JLabel label  = (JLabel) tree.selectPath("/folder2/entry2").component.getCellRenderer();

JLabel labe2  = (JLabel) tree.selectPath("/folder2/entry3").component.getCellRenderer();

2 つの JLabel を取得していますが、どちらも folder2 の最後のエントリを指しています。Fest はここではあまり役に立たないように思われるので、JTree を直接使用して (JTreeFixture.component() のおかげで => JTree を返す)、JTree から直接情報を抽出することを計画しています。

エントリのパスを知って、JTree に含まれる JLabel を取得するにはどうすればよいですか?

解決済み:私はこのメソッドを作成しました:

public Icon getIconeFromPath(String path){
    JTreeFixture tree = getTreeFromWindow();
    PreMadeCellRenderer renderer = (PreMadeCellRenderer) tree.component().getCellRenderer().;
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.clickPath(path).component().getLastSelectedPathComponent();
    JLabel label = (JLabel) renderer.getTreeCellRendererComponent(tree.component(), node, true, true, true, 0, true);
    return label.getIcon();
}

getTreeFromWindow は JTreeFixture を返します PreMadeCellRenderer は DefaultTreeCellRenderer を拡張するレンダラーです getTreeCellRendererComponent はコンポーネントを返します

何を入力すればよいかわからなかったので、パラメーター0を使用して動作しました:)

4

1 に答える 1

1

Swing は、すべてのツリー ノードの描画に同じ共有 JLabel オブジェクトを使用します (パフォーマンス上の理由から)。ツリー ノードのユーザー オブジェクト (通常は文字列) を確認することをお勧めします。

これも参照してください: Swing の JTable および JTree のレンダラーのメカニズムを理解するのが難しい

于 2012-12-12T10:56:22.643 に答える