Moderator: JIDE Support
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import ca.odell.glazedlists.*;
import ca.odell.glazedlists.gui.*;
import ca.odell.glazedlists.swing.*;
import com.jidesoft.converter.*;
import com.jidesoft.grid.*;
import junit.framework.*;
public class GroupTableColumnSelectionTest extends TestCase
{
private DefaultTableModel myTableModel;
private GroupTable myTable;
public void testColumnWithoutSort()
{
selectColumnAndAdd();
}
public void testColumnWithSort()
{
myTable.sortColumn(0);
selectColumnAndAdd();
}
private void selectColumnAndAdd()
{
myTable.setRowSelectionInterval(2, 2);
myTable.setColumnSelectionInterval(1, 1);
assertTrue(myTable.getSelectedColumns().length > 0);
myTableModel.addRow(new Integer[] {7,8,9});
assertTrue(myTable.getSelectedColumns().length > 0);
}
protected void setUp()
{
myTableModel = new DefaultTableModel(new Integer[][] {{1,2,3},{4,5,6}}, new String[] {"col0", "col1", "col2"});
DefaultGroupTableModel myGroupTableModel = new DefaultGroupTableModel(myTableModel);
myGroupTableModel.addGroupColumn(0);
myGroupTableModel.groupAndRefresh();
myTable = new GroupTable(myGroupTableModel);
}
}
/*
* @(#)GroupTableDemo.java 4/4/2007
*
* Copyright 2002 - 2007 JIDE Software Inc. All rights reserved.
*/
import com.jidesoft.converter.ConverterContext;
import com.jidesoft.converter.ObjectConverter;
import com.jidesoft.converter.ObjectConverterManager;
import com.jidesoft.dialog.ButtonPanel;
import com.jidesoft.grid.*;
import com.jidesoft.plaf.LookAndFeelFactory;
import com.jidesoft.swing.JideBoxLayout;
import com.jidesoft.swing.JideSplitPane;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Vector;
/**
* Demoed Component: {@link com.jidesoft.grid.JideTable}
* <br>
* Required jar files: jide-common.jar, jide-grids.jar
* <br>
* Required L&F: any L&F
*/
public class AdvancedGroupTableDemo extends AbstractDemo {
public TreeTable _table;
public JLabel _message;
protected DefaultTableModel _tableModel;
private DefaultGroupTableModel _groupTableModel;
public AdvancedGroupTableDemo() {
}
public String getName() {
return "GroupTableDemo Demo";
}
public String getProduct() {
return PRODUCT_NAME_GRIDS;
}
public int getAttributes() {
return ATTRIBUTE_BETA;
}
static CellStyle cellStyle = new CellStyle();
static {
cellStyle.setHorizontalAlignment(SwingConstants.CENTER);
}
protected final Color BACKGROUND1 = new Color(253, 253, 244);
protected final Color BACKGROUND2 = new Color(255, 255, 255);
public Component getOptionsPanel() {
JPanel checkBoxPanel = new JPanel(new GridLayout(0, 1));
JCheckBox singleLevel = new JCheckBox("Single Level");
singleLevel.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
_groupTableModel.setSingleLevelGrouping(e.getStateChange() == ItemEvent.SELECTED);
_groupTableModel.groupAndRefresh();
_groupTableModel.fireTableStructureChanged();
_table.expandAll();
}
});
singleLevel.setSelected(_groupTableModel.isSingleLevelGrouping());
JCheckBox showGroupColumns = new JCheckBox("Show Group Columns");
showGroupColumns.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
_groupTableModel.setDisplayGroupColumns(e.getStateChange() == ItemEvent.SELECTED);
_groupTableModel.groupAndRefresh();
_groupTableModel.fireTableStructureChanged();
_table.expandAll();
}
});
showGroupColumns.setSelected(_groupTableModel.isDisplayGroupColumns());
JCheckBox showCountColumn = new JCheckBox("Show Count Columns");
showCountColumn.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
_groupTableModel.setDisplayCountColumn(e.getStateChange() == ItemEvent.SELECTED);
_groupTableModel.groupAndRefresh();
_groupTableModel.fireTableStructureChanged();
_table.expandAll();
}
});
showCountColumn.setSelected(_groupTableModel.isDisplayCountColumn());
checkBoxPanel.add(singleLevel);
checkBoxPanel.add(showGroupColumns);
checkBoxPanel.add(showCountColumn);
return checkBoxPanel;
}
public Component getDemoPanel() {
JideSplitPane panel = new JideSplitPane(JideSplitPane.VERTICAL_SPLIT);
final Object[] columnNames = {"ID", "Time", "Source", "Destination", "Description"};
final Object[][] data = {
{1, "12:00", "A", "X", "desciptions"},
{2, "1:00", "B", "Z", "desciptions"},
{1, "1:00", "A", "Y", "desciptions"},
{3, "12:00", "A", "Y", "desciptions"},
{2, "1:00", "A", "Z", "desciptions"},
{2, "1:05", "A", "Z", "desciptions"},
{6, "1:00", "B", "Y", "desciptions"},
{3, "1:00", "A", "Y", "desciptions"},
{3, "1:05", "C", "X", "desciptions"},
};
_tableModel = new StyledDefaultTableModel(data, columnNames);
// for (int i = 0; i < 1000; i++) {
// for (int j = 0; j < data.length; j++) {
// Object[] objects = data[j];
// objects[0] = (int) (Math.random() * 100);
// _tableModel.addRow(objects);
// }
// }
TableRowFilter filterForRow = new AbstractTableRowFilter() {
public boolean isValueFiltered(Object value) {
// value will be an instance of Row
return false;
}
};
QuickTableFilterField beforeField = new QuickTableFilterField(_tableModel);
_groupTableModel = new DefaultGroupTableModel(beforeField.getDisplayTableModel());
_groupTableModel.addGroupColumn(2);
_groupTableModel.addGroupColumn(3);
_groupTableModel.groupAndRefresh();
QuickTableFilterField afterField = new QuickTableFilterField(_groupTableModel);
afterField.getDisplayTableModel().addFilter(filterForRow);
_table = new GroupTable(afterField.getDisplayTableModel());
AutoFilterTableHeader header = new AutoFilterTableHeader(_table);
header.setAutoFilterEnabled(true);
_table.setTableHeader(header);
_table.setRowHeight(18);
_table.setOptimized(true);
_table.setShowLeafNodeTreeLines(true);
_table.expandAll();
panel.add(new JScrollPane(_table));
TableModelMonitor.monitor(_table);
JPanel tableModelPanel = new JPanel(new BorderLayout(6, 6));
final SortableTable table = new SortableTable(_tableModel);
tableModelPanel.add(new JScrollPane(table));
ButtonPanel buttonPanel = new ButtonPanel();
JButton delete = new JButton("Delete");
delete.addActionListener(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
int[] rows = table.getSelectedRows();
for (int i = rows.length - 1; i >= 0; i--) {
int row = rows[i];
_tableModel.removeRow(row);
}
}
});
JButton insert = new JButton("Insert");
insert.addActionListener(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
Vector rowData = _tableModel.getDataVector();
int index = table.getSelectedRow();
if (index != -1) {
Vector v = (Vector) rowData.get(index);
Vector clone = new Vector();
for (int i = 0; i < v.size(); i++) {
if (i == 0) {
clone.add((int) (Math.random() * 10));
}
else {
clone.add("" + v.get(i));
}
}
_tableModel.insertRow(index, clone);
}
else {
Vector clone = new Vector();
for (int i = 0; i < columnNames.length; i++) {
if (i == 0) {
clone.add((int) (Math.random() * 10));
}
else {
clone.add(data[0][i]);
}
}
_tableModel.addRow(clone);
}
}
});
buttonPanel.add(insert);
buttonPanel.add(delete);
JPanel fieldPanel = new JPanel(new GridLayout(2, 1, 4, 4));
fieldPanel.add(createTitledComponent("Before Grouping: ", "This filter field filters before the group table model", beforeField));
fieldPanel.add(createTitledComponent("After Grouping: ", "This filter field filters after the group table model", afterField));
tableModelPanel.add(fieldPanel, BorderLayout.BEFORE_FIRST_LINE);
tableModelPanel.add(buttonPanel, BorderLayout.AFTER_LAST_LINE);
panel.add(tableModelPanel);
return panel;
}
private JPanel createTitledComponent(String label, String toolTip, JComponent component) {
JPanel panel = new JPanel();
panel.setLayout(new JideBoxLayout(panel, JideBoxLayout.Y_AXIS, 3));
component.setToolTipText(toolTip);
panel.add(new JLabel(label));
panel.add(component);
panel.add(Box.createGlue(), JideBoxLayout.VARY);
return panel;
}
public String getDemoFolder() {
return "G16. GroupTable";
}
public static void main(String[] args) {
ObjectConverterManager.initDefaultConverter();
ObjectConverterManager.registerConverter(DefaultGroupRow.class, new ObjectConverter() {
public String toString(Object object, ConverterContext context) {
if (object instanceof DefaultGroupRow) {
DefaultGroupRow row = (DefaultGroupRow) object;
StringBuffer buf = new StringBuffer();
DefaultGroupTableModel defaultGroupTableModel = (DefaultGroupTableModel) row.getTreeTableModel();
for (int i = 0; i < row.getNumberOfConditions(); i++) {
buf.append(" ");
if (defaultGroupTableModel.isSingleLevelGrouping() || i == row.getNumberOfConditions() - 1) {
buf.append(defaultGroupTableModel.getActualModel().getColumnName(row.getConditionColumn(i)));
buf.append(": ");
buf.append(row.getConditionValue(i));
}
}
int allVisibleChildrenCount = row.getAllVisibleChildrenCount();
buf.append(" (").append(allVisibleChildrenCount).append(" items)");
return buf.toString();
}
return null;
}
public boolean supportToString(Object object, ConverterContext context) {
return true;
}
public Object fromString(String string, ConverterContext context) {
return null;
}
public boolean supportFromString(String string, ConverterContext context) {
return false;
}
});
LookAndFeelFactory.installDefaultLookAndFeelAndExtension();
showAsFrame(new AdvancedGroupTableDemo());
}
private static class StyledDefaultTableModel extends DefaultTableModel implements StyleModel {
public StyledDefaultTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
public boolean isCellEditable(int row, int column) {
return true;
}
public CellStyle getCellStyleAt(int rowIndex, int columnIndex) {
if (new Integer(2).equals(getValueAt(rowIndex, columnIndex))) {
CellStyle cs = new CellStyle();
cs.setForeground(Color.RED);
return cs;
}
return null;
}
public boolean isCellStyleOn() {
return true;
}
}
}
import javax.swing.*;
import javax.swing.table.*;
import junit.framework.*;
import com.jidesoft.grid.*;
public class SortableTableOptimizedTest extends TestCase
{
private DefaultTableModel myTableModel;
private SortableTable myTable;
public void testOrderUnoptimized() throws InterruptedException
{
update();
Thread.sleep(5000);
assertOrder();
}
public void testOrderOptimized() throws InterruptedException
{
myTable.setOptimized(true);
Thread.sleep(1000);
update();
Thread.sleep(5000);
assertOrder();
}
private void update()
{
myTableModel.setValueAt(0, 2, 0);
}
private void assertOrder()
{
SortableTableModel sortableTableModel = (SortableTableModel) myTable.getModel();
for (int r = 0; r < sortableTableModel.getRowCount() - 1; r++)
{
int current = (Integer) sortableTableModel.getValueAt(r, 0);
int next = (Integer) sortableTableModel.getValueAt(r+1, 0);
assertTrue("row = " + r + ", current = " + current + ", next = " + next, current <= next);
}
}
protected void setUp()
{
myTableModel = new DefaultTableModel(new Integer[][] {{1},{2},{3}}, new String[] {"col0"});
myTable = new SortableTable(myTableModel);
myTable.sortColumn(0);
JFrame myFrame = new JFrame();
myFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
myFrame.getContentPane().add(new JScrollPane(myTable));
myFrame.setVisible(true);
myFrame.pack();
}
}
Users browsing this forum: No registered users and 5 guests