- 论坛徽章:
- 0
|
!!请问JTree的子结点图标可以设成两种不同的图像吗?!!
应该自己创建一个TreeCellRender,然后重载getTreeCellRendererComponent()方法,在不同的情况下设置不同的leaf icon,然后返回这个TreeCellRender。
- import java.awt.Component;
- import java.util.Calendar;
- import javax.swing.Icon;
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JTree;
- import javax.swing.tree.DefaultTreeCellRenderer;
- public class LeafIconTest {
- private JFrame jf = null;
- /**
- * @param args
- */
- public static void main(String[] args) {
- LeafIconTest lit = new LeafIconTest();
- lit.test();
- }
- private void test() {
- jf.show();
- }
- public LeafIconTest() {
- super();
- jf = new JFrame("Leaf Icon Test");
- jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- jf.setSize(200, 300);
- jf.getContentPane().add(getJTree());
- }
- private Component getJTree() {
- JTree jt = new JTree();
- jt.setCellRenderer(new DefaultTreeCellRenderer() {
- public Component getTreeCellRendererComponent(JTree tree,
- Object value, boolean sel, boolean expanded, boolean leaf,
- int row, boolean hasFocus) {
- System.out.println("[DEBUG] "
- + Calendar.getInstance().getTime().toGMTString()
- + " getLeafIcon invoked");
- super.getTreeCellRendererComponent(tree, value, sel, expanded,
- leaf, row, hasFocus);
- if (leaf) {
- setIcon(getLengthIcon(value));
- }
- return this;
- }
- });
- return jt;
- }
- protected Icon getLengthIcon(Object value) {
- ImageIcon ii;
- // We use the length of the string representation of the node to
- // determine the icon.
- // In real world, we need to determine this by the
- // 'male | female' attribute of the tree node, which can be extracted
- // from the parameter 'value'
- int length = value.toString().length();
- if (length == 5 || length == 3) {
- ii = new ImageIcon("e:/temp/male.jpg");
- } else {
- ii = new ImageIcon("e:/temp/female.jpg");
- }
- System.out.println(value.toString());
- return ii;
- }
- }
复制代码 |
|