从 JTree 获取 JLabel 使用(或不使用)Fest 框架



我正在使用Fest来检查两个条目是否具有相同的图标。

我实际上有一个JTreeFixture,从我可以访问特定条目及其路径。

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

得到了两个 JLabel,但它们都指向我文件夹中的最后一个条目2。由于 Fest 在这里似乎对我帮助不大,我打算直接使用 JTree(感谢 JTreeFixture.component() => 返回 JTree),并直接从 JTree 中提取信息。

我怎样才能让一个JLabel包含在JTree中,知道条目的路径?

解决:我创建了这种方法:

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 返回一个 JTreeFixturePreMadeCellRenderer 是一个扩展 DefaultTreeCellRenderer 的渲染器getTreeCellRendererComponent 返回一个组件,其参数在此处解释 http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html

我使用参数 0 是因为我不知道要输入什么,并且工作:)

Swing 使用相同的共享 JLabel 对象来绘制所有树节点(出于性能原因)。我建议检查树节点的用户对象(通常是字符串)。

另请参阅此内容:难以理解 swing 的 JTable 和 JTree 的渲染器机制

相关内容

  • 没有找到相关文章

最新更新