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