package com.ulcjava.test.interactive; import com.ulcjava.base.application.AbstractApplication; import com.ulcjava.base.application.ULCBoxPane; import com.ulcjava.base.application.ULCButton; import com.ulcjava.base.application.ULCDialog; import com.ulcjava.base.application.ULCFrame; import com.ulcjava.base.application.ULCScrollPane; import com.ulcjava.base.application.ULCTableTree; import com.ulcjava.base.application.event.ActionEvent; import com.ulcjava.base.application.event.IActionListener; import com.ulcjava.base.application.tabletree.DefaultMutableTableTreeNode; import com.ulcjava.base.application.tabletree.DefaultTableTreeCellRenderer; import com.ulcjava.base.application.tabletree.DefaultTableTreeModel; import com.ulcjava.base.application.tabletree.ULCTableTreeColumn; import com.ulcjava.base.development.DevelopmentRunner; public class TableTreeMemLeak extends AbstractApplication { public void start() { final ULCFrame frame = new ULCFrame("Snippet"); ULCBoxPane boxPane = new ULCBoxPane(false); ULCButton button = new ULCButton("Show Dialog"); button.addActionListener(new IActionListener() { public void actionPerformed(ActionEvent event) { createDialog(frame).setVisible(true); } }); boxPane.add(button); button = new ULCButton("Trigger Roundtrip"); button.addActionListener(new IActionListener() { public void actionPerformed(ActionEvent event) { } }); boxPane.add(button); frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE); frame.add(boxPane); frame.setVisible(true); } private ULCDialog createDialog(ULCFrame frame) { ULCDialog dialog = new ULCDialog(null, "Dialog"); dialog.setDefaultCloseOperation(ULCDialog.DISPOSE_ON_CLOSE); ULCTableTree tableTree = new ULCTableTree(new SnipetTableTreeModel()); DefaultTableTreeCellRenderer renderer = new DefaultTableTreeCellRenderer(); renderer.setToolTipText("snippet tool tip text"); ULCTableTreeColumn treeColumn = tableTree.getColumnModel().getColumn(0); treeColumn.setCellRenderer(renderer); treeColumn = tableTree.getColumnModel().getColumn(1); treeColumn.setCellRenderer(renderer); treeColumn = tableTree.getColumnModel().getColumn(2); treeColumn.setCellRenderer(renderer); dialog.getContentPane().add(new ULCScrollPane(tableTree)); return dialog; } public static void main(String[] args) { DevelopmentRunner.setApplicationClass(TableTreeMemLeak.class); DevelopmentRunner.main(args); } public static class SnipetTableTreeModel extends DefaultTableTreeModel { public SnipetTableTreeModel() { super(createRoot(), createColumnNames(3)); } private static DefaultMutableTableTreeNode createRoot() { DefaultMutableTableTreeNode child0 = createNode("root:0", 3); child0.add(createNode("root:0:0", 3)); child0.add(createNode("root:0:1", 3)); DefaultMutableTableTreeNode child1 = createNode("root:1", 3); child1.add(createNode("root:1:0", 3)); child1.add(createNode("root:1:1", 3)); child1.add(createNode("root:1:2", 3)); DefaultMutableTableTreeNode child2 = createNode("root:2", 3); child2.add(createNode("root:2:0", 3)); DefaultMutableTableTreeNode result = createNode("root", 3); result.add(child0); result.add(child1); result.add(child2); return result; } private static String[] createColumnNames(int columns) { String[] result = new String[columns]; for (int i = 0; i < result.length; i++) { result[i] = "column " + i; } return result; } private static DefaultMutableTableTreeNode createNode(String prefix, int columns) { Object[] data = new Object[columns]; for (int i = 0; i < data.length; i++) { data[i] = prefix + ":" + i; } return new DefaultMutableTableTreeNode(data); } } }