Hi Markus,
>We tried to set the Tree.leafIcon to null in our customized
>look&Feel class in the defaults table and get a
>nullpointerexception. Putting the snippet
>
> UIDefaults uiDefaults = UIManager.getDefaults();
> uiDefaults.put("Tree.leafIcon", null);
>
>in the main-method of the ULCTableTreeTest you get the same
>behaviour and the follwing stacktrace:
I tried the above, i.e., specifying null icon, with ULC 6.1.1 and JRE
1.4.2_05. I am not getting any errors.
I tried putting a particular leaf icon and that is displayed correctly.
When I specify a custom renderer, no icon is displayed for leaf.
When I do not specify a custom renderer then:
If icon is specified in uidefaults, then that icon is displayed
If icon is null in uidefaults, then default icon is displayed
At no time I got an error.
Am I missing something?
You say that you have a customized L&F class. Which L&F do you set?
It will help if you can send a small snippet with all the relevant classes.
Thanks and regards,
Janak
>
>java.lang.NullPointerException
> at
>com.ulcjava.base.client.tabletree.TableTreeTree.getTableCellOffset(
>TableTreeTree.java:4)
> at
>com.ulcjava.base.client.tabletree.TreeColumnCellRenderer.getTableCe
>llRendererComponent(TreeColumnCellRenderer.java:7)
> at
>com.ubs.swidULF.v2.client.tabletree.UlfTreeColumnCellRenderer.getTa
>bleCellRendererComponent(UlfTreeColumnCellRenderer.java:96)
> at javax.swing.JTable.prepareRenderer(JTable.java:3789)
> at
>com.ubs.swidULF.v2.client.tabletree.UlfTableTreeTable.prepareRender
>er(UlfTableTreeTable.java:52)
> at
>javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:1236)
> at
>javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1138)
> at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1061)
> at com.ubs.swidULF.v2.plaf.ulf.UlfTableUI.paint(UlfTableUI.java:65)
> at javax.swing.plaf.ComponentUI.update(ComponentUI.java:174)
> at javax.swing.JComponent.paintComponent(JComponent.java:576)
> at javax.swing.JComponent.paint(JComponent.java:843)
> at
>com.ulcjava.base.client.tabletree.TableTreeTable.paint(TableTreeTab
>le.java:43)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JViewport.paint(JViewport.java:753)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at
>javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4919)
> at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4865)
> at javax.swing.JComponent.paint(JComponent.java:833)
> at
>java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:63)
> at
>sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:93)
> at
>sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:130)
> at java.awt.Container.paint(Container.java:1349)
> at
>java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:54)
> at sun.awt.RepaintArea.paint(RepaintArea.java:216)
> at
>sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:293)
> at java.awt.Component.dispatchEventImpl(Component.java:3774)
> at java.awt.Container.dispatchEventImpl(Container.java:1665)
> at java.awt.Window.dispatchEventImpl(Window.java:1653)
> at java.awt.Component.dispatchEvent(Component.java:3574)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:536)
> at
>com.ulcjava.base.client.FilteringEventQueue.dispatchEvent(Filtering
>EventQueue.java:25)
> at
>java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatch
>Thread.java:237)
> at
>java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchTh
>read.java:187)
> at
>java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:181)
> at
>java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:173)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:136)
>
>
>Regards,
>Markus
>
>-----Original Message-----
>From: Janak Mulani [mailto:[EMAIL PROTECTED]
>Sent: Montag, 4. September 2006 16:11
>To: Wyss, Markus
>Cc: [email protected]
>Subject: RE: [ULC-developer] DefaultRenderer on Tree / TableTree
>
>Hi Markus,
>
>Could you please tell me which version of ULC are you using and which JRE?
>
>I assumed that you are using ULC 6.0.4 and hence tested your samples with
>that version.
>
>>- 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)
>
>I ran both the classes, I see no difference. The icon defined by the
>renderer is drawn in both cases.
>
>However, say I specify only the openIcon. Then the behavior is different in
>Swing and ULC.
>
>For closed nodes, Swing shows default icons while ULC shows no icon at all.
>
>So, when you set a renderer in ULCTree which does not specify any icons,
>ULCTree should draw default icons.
>
>Is this the problem you are talking about?
>
>The DefaultTreeCellRenderer in Swing takes default icons from L&F and sets
>them on the renderer.
>
>The DefaultTreeCellRenderer in ULC does not take default icons from L&F.
>
>You will need an extension to overcome this problem.
>
>I.e. you will have to define MyDefaultTreeCellRenderer extends MyULCLabel
>and MyULCLabel extends ULCLabel.
>
>Then in MyUILabel extends UILabel override getTreeCellRendererComponent and
>set the default icons for leaf, open, close if no icon is specified.
>
>>- 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.
>
>In Swing, on the DefaultTreeCellRenderer, there is a property
>"drawsFocusBorderAroundIcon" which is defined by L&F
>UIManager.get("Tree.drawsFocusBorderAroundIcon"). For Metal it is false.
>
>DefaultTreeCellRenderer extends JLabel and overrides the paint() method in
>which it considers this property.
>
>This property is not being considered in case of ULC.
>
>You will need an extension to overcome this problem.
>
>I.e. you will have to define MyDefaultTreeCellRenderer extends MyULCLabel
>and MyULCLabel extends ULCLabel.
>
>Then in MyUILabel extends UILabel create your own JLabel in
>createBasicObject() and override its paint method.
>
>See Swing's DefaultTreeCellRenderer.paint()
>
>>- On a ULCTableTree with a custom cell renderer: The lines of the
>>tree are not drawn on the selected row(s). (See class ULCTableTreeTest)
>
>I did setSelectionBackground(Color.white).
>
>I can see the line connecting parent node with child node if that is what
>you meant by "lines of the tree".
>
>The color of the lines and the selectionBackground color are the same and
>that is the reason you don't see them.
>
>I hope I understood your problem.
>
>>- 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.
>
>Can you please send me a small snippet and the stack trace?
>
>Doing the above in your ULCTableTreeTest did not give any error.
>
>Thanks and regards,
>
>Janak
>
>>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
>
>_______________________________________________
>ULC-developer mailing list
>[email protected]
>http://lists.canoo.com/mailman/listinfo/ulc-developer
_______________________________________________
ULC-developer mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/ulc-developer