Moderator: JIDE Support
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import com.jidesoft.grid.*;
public class TestTreeTableModel {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
final List<Row> list = new ArrayList<Row>();
for(int i = 0; i < 20000; i++) {
final int value = i;
list.add(new AbstractRow() {
@Override
public Object getValueAt(int columnIndex) {
return value;
}
});
}
final TreeTableModel<Row> model = new TreeTableModel<Row>() {
@Override
public int getColumnCount() {
return 1;
}
};
model.setOriginalRows(new ArrayList<Row>(list));
final JLabel label = new JLabel("Row count: " + list.size());
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(label, BorderLayout.PAGE_START);
frame.getContentPane().add(new JScrollPane(new TreeTable(model)));
JPanel buttons = new JPanel();
buttons.add(new JButton(new AbstractAction("Reset") {
@Override
public void actionPerformed(ActionEvent e) {
long start = System.currentTimeMillis();
model.setOriginalRows(new ArrayList<Row>(list));
label.setText("Duration: " + (System.currentTimeMillis() - start));
}
}));
buttons.add(new JButton(new AbstractAction("Default row remove all") {
@Override
public void actionPerformed(ActionEvent e) {
long start = System.currentTimeMillis();
RootExpandableRow root = (RootExpandableRow) model.getRoot();
root.removeAllChildren();
label.setText("Duration: " + (System.currentTimeMillis() - start));
}
}));
buttons.add(new JButton(new AbstractAction("Custom row remove all") {
@Override
public void actionPerformed(ActionEvent e) {
long start = System.currentTimeMillis();
RootExpandableRow root = (RootExpandableRow) model.getRoot();
List<Object> children = new ArrayList<Object>(root.getChildren());
for (Object child : children) {
if (child instanceof Node) {
((Node) child).setParent(null);
}
}
root.setChildren(new ArrayList<Row>());
root.notifyChildrenDeleted((List<? extends Row>) children);
label.setText("Duration: " + (System.currentTimeMillis() - start));
}
}));
buttons.add(new JButton(new AbstractAction("Row remove half iter") {
@Override
public void actionPerformed(ActionEvent e) {
long start = System.currentTimeMillis();
RootExpandableRow root = (RootExpandableRow) model.getRoot();
List<Object> children = new ArrayList<Object>(root.getChildren());
for (int i = 0; i < children.size(); i += 2) {
model.removeRow((Row) children.get(i));
}
label.setText("Duration: " + (System.currentTimeMillis() - start));
}
}));
buttons.add(new JButton(new AbstractAction("Row remove half batch") {
@Override
public void actionPerformed(ActionEvent e) {
long start = System.currentTimeMillis();
RootExpandableRow root = (RootExpandableRow) model.getRoot();
List<Object> children = new ArrayList<Object>(root.getChildren());
List<Row> remove = new ArrayList<Row>();
for (int i = 0; i < children.size(); i += 2) {
remove.add((Row) children.get(i));
}
root.removeChildren(remove);
label.setText("Duration: " + (System.currentTimeMillis() - start));
}
}));
buttons.add(new JButton(new AbstractAction("Custom row remove half") {
@Override
public void actionPerformed(ActionEvent e) {
long start = System.currentTimeMillis();
RootExpandableRow root = (RootExpandableRow) model.getRoot();
List<Row> keep = new ArrayList<Row>();
List<Object> children = new ArrayList<Object>(root.getChildren());
for (int i = 0; i < children.size(); i += 2) {
keep.add((Row) children.get(i));
}
for (Object child : children) {
if (child instanceof Node) {
((Node) child).setParent(null);
}
}
root.setChildren(new ArrayList<Row>());
root.notifyChildrenDeleted((List<? extends Row>) children);
root.setChildren(keep);
root.notifyChildrenInserted(keep, 0);
label.setText("Duration: " + (System.currentTimeMillis() - start));
}
}));
frame.getContentPane().add(buttons, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Users browsing this forum: No registered users and 1 guest