We discovered some Issues / Swing differences on the ULCTree and ULCTableTree: 

- Using a custom renderer extended from 
DefaultTreeCellRenderer/DefaultTableTreeCellRenderer on ULCTree / ULCTableTree 
results in the lost of the default icons provided by the current look&feel. 
Using Swing's JTree the default icons are drawn. (See classes SimpleULCTree and 
SimpleJTree at the bottom of the mail)

- On a ULCTree with a custom cell renderer (or on the tree column of 
ULCTableTree) the focus is drawn differently than the Swing counterpart. In ULC 
the icon is inside the focus border.

- On a ULCTableTree with a custom cell renderer: The lines of the tree are not 
drawn on the selected row(s). (See class ULCTableTreeTest)

- Setting a default tree icon of the look and feel to null (e.q. 
UIManager.put("Tree.leafIcon", null) ) results in a NullPointerException in the 
TableTree-Widget.

Is there a workaround especially for the focus and line drawing issue ?

Best Regards, 
Markus Wyss
UBS AG

Tel. +41-44-236 31 02
Fax.+41-44-236 30 22
 
public class SimpleULCTree extends AbstractApplication {
    
    public void start() {
        ULCFrame frame = new ULCFrame("ULCTree with DefaultTreeCellRenderer");
        
        ULCBorderLayoutPane colorBox = new ULCBorderLayoutPane();
        colorBox.add(new ULCScrollPane(createTree()));
        
        frame.getContentPane().add(colorBox);
        frame.pack();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);
        frame.setVisible(true);
    }
    
    private ULCTree createTree() {
        final ULCTree tree = new ULCTree(new MyTreeModel());
        tree.setCellRenderer(new MyTreeRenderer());
        return tree;
    }
    
    class MyTreeRenderer extends DefaultTreeCellRenderer {
        
        public MyTreeRenderer() {
            super();
            ULCIcon icon = new 
ULCIcon(this.getClass().getResource("ampel_rot.gif"));
            setClosedIcon(icon);
            setOpenIcon(icon);
            setLeafIcon(icon);
        }
        
    }
    
    public static void main(String[] args) {
            DevelopmentRunner.setApplicationClass(SimpleULCTree.class);
            DevelopmentRunner.run();
        }
    
    public class MyTreeModel extends DefaultTreeModel {
        
        public MyTreeModel() {
            super( new DefaultMutableTreeNode("Customers"));
            
            DefaultMutableTreeNode customers = (DefaultMutableTreeNode) 
getRoot();
            
            DefaultMutableTreeNode bundle1234 = new 
DefaultMutableTreeNode("Bundle 1234");
            customers.add(bundle1234);
            
            DefaultMutableTreeNode brig = new DefaultMutableTreeNode("Brig");
            bundle1234.add(brig);
            brig.add(new DefaultMutableTreeNode("Account 11111111", true));
            brig.add(new DefaultMutableTreeNode("Account 22222222", true));
            
            DefaultMutableTreeNode ascona = new 
DefaultMutableTreeNode("Ascona");
            bundle1234.add(ascona);
            ascona.add(new DefaultMutableTreeNode("Account 3333333", true));
            
            
            DefaultMutableTreeNode bundle5678 = new 
DefaultMutableTreeNode("Bundle 5678");
            customers.add(bundle5678);
            
            DefaultMutableTreeNode zuerich = new 
DefaultMutableTreeNode("Zürich");
            bundle5678.add(zuerich);
            zuerich.add(new DefaultMutableTreeNode("Account 4444444", true));
        }
    }
}

public class SimpleJTree extends JFrame {

    public SimpleJTree() {
        super("JTree with DefaultTreeCellRenderer");
        
        JPanel colorBox = new JPanel(new BorderLayout());
        colorBox.add(new JScrollPane(createTree()));
        
        getContentPane().add(colorBox);
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
    }
    
    private JTree createTree() {
        final JTree tree = new JTree(new MyTreeModel());
        tree.setCellRenderer(new MyTreeRenderer());
        return tree;
    }
    
    
    class MyTreeRenderer extends DefaultTreeCellRenderer {
        
        public MyTreeRenderer() {
            super();
            Icon icon = new 
ImageIcon(this.getClass().getResource("ampel_rot.gif"));
            setOpenIcon(icon);
            setClosedIcon(icon);
            setLeafIcon(icon);
        }
        
    }
    
    public static void main(String[] args) {
        SimpleJTree simpleTree = new SimpleJTree();
        simpleTree.setVisible(true);
        }
    
    public class MyTreeModel extends DefaultTreeModel {
        
        public MyTreeModel() {
            super( new DefaultMutableTreeNode("Customers"));
            
            DefaultMutableTreeNode customers = (DefaultMutableTreeNode) 
getRoot();
            
            DefaultMutableTreeNode bundle1234 = new 
DefaultMutableTreeNode("Bundle 1234");
            customers.add(bundle1234);
            
            DefaultMutableTreeNode brig = new DefaultMutableTreeNode("Brig");
            bundle1234.add(brig);
            brig.add(new DefaultMutableTreeNode("Account 11111111", true));
            brig.add(new DefaultMutableTreeNode("Account 22222222", true));
            
            DefaultMutableTreeNode ascona = new 
DefaultMutableTreeNode("Ascona");
            bundle1234.add(ascona);
            ascona.add(new DefaultMutableTreeNode("Account 3333333", true));
            
            
            DefaultMutableTreeNode bundle5678 = new 
DefaultMutableTreeNode("Bundle 5678");
            customers.add(bundle5678);
            
            DefaultMutableTreeNode zuerich = new 
DefaultMutableTreeNode("Zürich");
            bundle5678.add(zuerich);
            zuerich.add(new DefaultMutableTreeNode("Account 4444444", true));
        }
    }
}

public class ULCTableTreeTest extends AbstractApplication {
    public void start() {
        ULCFrame frame = new ULCFrame();
        frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);

        DefaultMutableTableTreeNode root = new DefaultMutableTableTreeNode(
                new Object[] { "root", "root", "root" }, false);
        DefaultMutableTableTreeNode primaryOffering = new 
DefaultMutableTableTreeNode(
                new Object[] { "Offer", "Total",
                        "Total % " }, true);
        DefaultMutableTableTreeNode ubsStrategy = new 
DefaultMutableTableTreeNode(
                new Object[] { "AAAA", "13605", "16.84" }, false);
        DefaultMutableTableTreeNode inUbsStrategy = new 
DefaultMutableTableTreeNode(
                new Object[] { "BBBBB", "xx", "yy" }, true);
        DefaultMutableTableTreeNode ubsXtra = new DefaultMutableTableTreeNode(
                new Object[] { "CCCC", "11", "0.01" }, false);
        DefaultMutableTableTreeNode inUbsXtra = new DefaultMutableTableTreeNode(
                new Object[] { "DDDD", "zz", "vv" }, true);

        ubsStrategy.add(inUbsStrategy);
        ubsXtra.add(inUbsXtra);

        root.add(primaryOffering);
        root.add(ubsStrategy);
        root.add(ubsXtra);

        DefaultTableTreeModel model = new DefaultTableTreeModel(root,
                new String[] { "col1", "col2", "col3" });

        model.setRoot(root);
        ULCTableTree tree = new ULCTableTree(model);
        tree.setRootVisible(false);
        tree.setShowsRootHandles(true);
        
        tree.setTableTreeHeader(null);
        ULCTableTreeColumnModel cm = tree.getColumnModel();

        cm.getColumn(0).setCellRenderer(new MyCellRenderer(IDefaults.LEFT));
        cm.getColumn(1).setCellRenderer(new MyCellRenderer(IDefaults.RIGHT));
        cm.getColumn(2).setCellRenderer(new MyCellRenderer(IDefaults.RIGHT));
        
        frame.add(new ULCScrollPane(tree));
        frame.pack();
        frame.setLocation(300, 400);
        frame.setSize(700, 300);
        frame.setVisible(true);
    }
    
    class MyCellRenderer extends DefaultTableTreeCellRenderer {
        public MyCellRenderer(int alignment) {
            super();
            setHorizontalAlignment(alignment);
        }        
    }

    public static void main(String[] args) {
        DevelopmentRunner.setApplicationClass(ULCTableTreeTest.class);
        DevelopmentRunner.run();
    }
}
_______________________________________________
ULC-developer mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/ulc-developer

Reply via email to