动态更改JTree节点图标

时间:2016-04-12 03:47:13

标签: java swing jtree treecellrenderer

我使用RTLD_LOCAL实现了A.so。我在树中存储消息类型对象,我最初根据消息的libstdc++.so.6变量值设置节点图标。我可以使用以下代码成功完成此操作。

libstdc++.so.6

动态地我想让用户选择节点并改变其方向,以便更改节点图标。我是通过以下代码来完成的。

JTree

这是我的DefaultTreeModel课程。

direction

一旦我通过选择节点改变方向,图标就会改变。但是每当我点击其他节点或我的JFrame中的某个地方时,图标就会一直在改变方向。我调试并确保在单击节点并说要更改方向时仅调用 tcBuilderTree = new JTree(treeModel); tcBuilderTree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); tcBuilderTree.setCellRenderer(new DefaultTreeCellRenderer(){ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean isLeaf, int row, boolean focused) { Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, isLeaf, row, focused); if(value instanceof CustomMessageTreeNode){ setIcon(((CustomMessageTreeNode)value). getMessage().getMessageDirectionIcon()); } return c; } }); //implementation of getMessageDirectionIcon() public ImageIcon getMessageDirectionIcon(){ ImageIcon icon=null; URL messageIconUrl; if(msgDirection.equalsIgnoreCase("In")){ messageIconUrl = ToolBar.class.getResource ("/icons/arrowRight.png"); icon=new ImageIcon(messageIconUrl); } else if(msgDirection.equalsIgnoreCase("Out")){ messageIconUrl = ToolBar.class.getResource ("/icons/arrowLeft.png"); icon=new ImageIcon(messageIconUrl); } return icon; } 函数一次。

请让我知道为什么会发生这种情况,并且有更好的方法来执行此操作。当用户更改一次时,节点图标会继续更改的原因是什么。

0 个答案:

没有答案