Skip to content

Commit a9cbfb1

Browse files
committed
Further performance boost.
1 parent 4652fc3 commit a9cbfb1

File tree

5 files changed

+278
-46
lines changed

5 files changed

+278
-46
lines changed

src/org/quinto/swing/table/view/JBroTableColumnModel.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.quinto.swing.table.view;
22

3+
import java.beans.PropertyChangeEvent;
34
import java.util.ArrayDeque;
45
import java.util.ArrayList;
56
import java.util.Collection;
@@ -11,6 +12,7 @@
1112
import java.util.List;
1213
import java.util.Map;
1314
import java.util.Set;
15+
import javax.swing.JTable;
1416
import javax.swing.ListSelectionModel;
1517
import javax.swing.event.TableColumnModelListener;
1618
import javax.swing.table.DefaultTableColumnModel;
@@ -42,6 +44,27 @@ public void clear() {
4244
while ( getColumnCount() > 0 )
4345
super.removeColumn( getColumn( 0 ) );
4446
}
47+
48+
@Override
49+
public void propertyChange( PropertyChangeEvent e ) {
50+
String name = e.getPropertyName();
51+
if ( "width".equals( name ) && table.getAutoResizeMode() != JTable.AUTO_RESIZE_ALL_COLUMNS && e.getSource() instanceof JBroTableColumn && e.getNewValue() instanceof Integer && e.getOldValue() instanceof Integer ) {
52+
if ( totalColumnWidth >= 0 )
53+
totalColumnWidth += ( Integer )e.getNewValue() - ( Integer )e.getOldValue();
54+
JBroTableColumn column = ( JBroTableColumn )e.getSource();
55+
Enumeration< TableColumn > cols = getColumns();
56+
int x = 0;
57+
while ( cols.hasMoreElements() ) {
58+
TableColumn col = cols.nextElement();
59+
if ( col == column )
60+
break;
61+
x += col.getWidth();
62+
}
63+
JBroTableHeader header = table.getTableHeader();
64+
header.repaintHeaderAndTable( x, 0, header.getWidth() - x );
65+
} else
66+
super.propertyChange( e );
67+
}
4568

4669
public JBroTableColumn addColumn( IModelFieldGroup group, int x, int y ) {
4770
ModelData data = table.getData();

src/org/quinto/swing/table/view/JBroTableHeader.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import javax.swing.JTable;
6868
import javax.swing.JToolTip;
6969
import javax.swing.KeyStroke;
70+
import javax.swing.SwingUtilities;
7071
import javax.swing.TransferHandler;
7172
import javax.swing.border.Border;
7273
import javax.swing.event.AncestorListener;
@@ -90,6 +91,25 @@ public int getLevelsQuantity() {
9091
return getColumnModel().getLevelsQuantity();
9192
}
9293

94+
public void repaintHeaderAndTable( int x, int y, int width ) {
95+
Container c = table;
96+
while ( c != null ) {
97+
if ( SwingUtilities.isDescendingFrom( this, c ) )
98+
break;
99+
c = c.getParent();
100+
}
101+
Rectangle headerRect = new Rectangle( x, y, width, getHeight() - y );
102+
Rectangle tableRect = new Rectangle( x, 0, width, table.getHeight() );
103+
if ( c == null ) {
104+
repaint( headerRect );
105+
table.repaint( tableRect );
106+
} else {
107+
Rectangle r = SwingUtilities.convertRectangle( this, headerRect, c );
108+
r = r.union( SwingUtilities.convertRectangle( table, tableRect, c ) );
109+
c.repaint( r.x, r.y, r.width, r.height );
110+
}
111+
}
112+
93113
public TableCellRenderer getDefaultRenderer( int level ) {
94114
return getUI().getHeader( level ).getDefaultRenderer();
95115
}
@@ -123,6 +143,10 @@ public int getRowHeight( int level ) {
123143
return getUI().getRowHeight( level );
124144
}
125145

146+
public int getRowAtPoint( Point p ) {
147+
return getUI().getRowAtPoint( p );
148+
}
149+
126150
public JTableHeader createDelegateForLevel( int level ) {
127151
return new DelegateHeader( level );
128152
}

0 commit comments

Comments
 (0)