java – 动态更改JTree中特定节点的图标
发布时间:2020-12-15 04:07:41 所属栏目:Java 来源:网络整理
导读:我已经看到很多在树实例化期间更改节点图标的示例,但我想要一种方法来稍后动态更改单个节点的图标.所以,在我的主代码中,我将自定义渲染器添加到我的树中: // Icon I want to set nodes to laterImageIcon checkIcon = new ImageIcon("check.jpg");// Create
我已经看到很多在树实例化期间更改节点图标的示例,但我想要一种方法来稍后动态更改单个节点的图标.所以,在我的主代码中,我将自定义渲染器添加到我的树中:
// Icon I want to set nodes to later ImageIcon checkIcon = new ImageIcon("check.jpg"); // Creates tree with my nodes JTree tree = new JTree(nodes.top); // Create custom renderer Scenario1Renderer renderer = new Scenario1Renderer(); // Set to single tree selection tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); // Set tree to my custom renderer //renderer.setRendererIcon(greenIcon); tree.setCellRenderer(renderer); 我在渲染器中的代码是 public class Scenario1Renderer extends DefaultTreeCellRenderer { ImageIcon rendererIcon; public void setRendererIcon(ImageIcon myIcon){ this.rendererIcon = myIcon; }; public Component getTreeCellRendererComponent( JTree tree,Object value,boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus) { Component ret = super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus); //setIcon( rendererIcon ) ; return ret; } 所以,很明显,如果我设置了我的rendererIcon,它将使用我在树实例化期间传入的图标绘制我的所有节点.我想要某种方法,可以在以后的程序执行中设置单个节点的图标. 解决方法
您可以根据不同的条件设置不同的图标.下面是一个更改所选节点图标的简单示例:
import java.awt.Component; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; public class TestTree { private static void createAndShowUI() { JFrame frame = new JFrame(); final JTree tree = new JTree(buildDemoModel()); tree.setCellRenderer(new DefaultTreeCellRenderer() { private Icon loadIcon = UIManager.getIcon("OptionPane.errorIcon"); private Icon saveIcon = UIManager.getIcon("OptionPane.informationIcon"); @Override public Component getTreeCellRendererComponent(JTree tree,boolean selected,boolean isLeaf,boolean focused) { Component c = super.getTreeCellRendererComponent(tree,isLeaf,focused); if (selected) setIcon(loadIcon); else setIcon(saveIcon); return c; } }); tree.setVisibleRowCount(10); frame.add(new JScrollPane(tree)); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationByPlatform(true); frame.pack(); frame.setVisible(true); } private static DefaultTreeModel buildDemoModel() { DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root"); root.add(new DefaultMutableTreeNode("A")); root.add(new DefaultMutableTreeNode("B")); root.add(new DefaultMutableTreeNode("C")); return new DefaultTreeModel(root); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { createAndShowUI(); } }); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – XML模式可以在单个complexType中有多个选项吗?
- Java +selenium 爬Boss直聘中职位信息,薪资水平和职位描述
- Java:如何在单个线程中与多个客户端进行通信
- 从java GWT代码调用.js文件的Javascript函数
- java – 用于android的样式editText
- java – 为什么在捕获时使用IOexception而不是Exception?
- java – Groovy闭包可以扩展抽象类
- java – BaseGameUtils无法将GoogleApiClient.ApiOptions解
- java – do-while循环的范围?
- java – 如果签名jar(带有时间戳)的证书过期会发生什么