package jxtreetable.own;
import java.awt.Color;
import java.awt.HeadlessException;
import java.math.BigDecimal;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.TableColumnModel;
import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.decorator.ColorHighlighter;
import org.jdesktop.swingx.renderer.DefaultTreeRenderer;
import org.jdesktop.swingx.renderer.StringValue;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
import org.jdesktop.swingx.table.TableColumnExt;
import org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
public class TreeTableExample extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TreeTableExample ex = new TreeTableExample();
ex.setVisible(true);
}
});
}
public TreeTableExample() throws HeadlessException {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("Simple example");
setSize(600, 200);
AbstractMutableTreeTableNode root = new RootNode();
for (int i = 0; i < 20; ++i) {
AbstractMutableTreeTableNode child = createNode(i);
child.setParent(root);
}
final JXTreeTable treeTable = new JXTreeTable();
treeTable.setAutoCreateColumnsFromModel(false);
treeTable.setRootVisible(true);
TableColumnModel tableColumnModel = createTableColumnModel();
treeTable.setColumnModel(tableColumnModel);
DefaultTreeTableModel model = new DefaultTreeTableModel(root) {
@Override
public Class<?> getColumnClass(int column) {
if (column == 2 || column == 1) {
return BigDecimal.class;
}
return super.getColumnClass(column);
}
};
treeTable.setTreeTableModel(model);
treeTable.setHighlighters(new NosyToolTipHighlighter());
StringValue stringValue = new StringValue() {
@Override
public String getString(Object value) {
if(null == value) {
return "ups";
}
return ((DisplayedObject)value).name();
}
};
treeTable.setTreeCellRenderer(new DefaultTreeRenderer(stringValue));
add(new JScrollPane(treeTable));
}
private DefaultTableColumnModelExt createTableColumnModel() {
DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt();
TableColumnExt name = new TableColumnExt();
name.setHeaderValue("Name");
name.setModelIndex(0);
name.setIdentifier("identifier.name");
name.setHighlighters(new ColorHighlighter(Color.DARK_GRAY, Color.GREEN));
TableColumnExt sum = new TableColumnExt();
sum.setHeaderValue("Sum");
sum.setModelIndex(1);
sum.setIdentifier("identifier.sum");
TableColumnExt value_01 = new TableColumnExt();
value_01.setHeaderValue("1st");
value_01.setModelIndex(2);
value_01.setIdentifier("identifier.value.1");
TableColumnExt value_02 = new TableColumnExt();
value_02.setHeaderValue("2nd");
value_02.setModelIndex(3);
value_02.setIdentifier("identier.value.2");
TableColumnExt value_03 = new TableColumnExt();
value_03.setHeaderValue("3rd");
value_03.setModelIndex(4);
value_03.setIdentifier("identifier.value.3");
columnModel.addColumn(name);
columnModel.addColumn(sum);
columnModel.addColumn(value_01);
columnModel.addColumn(value_02);
columnModel.addColumn(value_03);
return columnModel;
}
private AbstractMutableTreeTableNode createNode(int startValue) {
BigDecimal start = BigDecimal.valueOf(startValue);
BigDecimal squareOfStart = start.pow(2);
final DisplayedObject displayedObject = new DisplayedObject("#" + startValue, start, squareOfStart);
return new DisplayObjectNode(displayedObject);
}
}