|
1 | 1 | package org.quinto.swing.table.view; |
2 | 2 |
|
3 | | -import java.awt.Container; |
4 | | -import java.awt.Dimension; |
5 | 3 | import java.beans.PropertyChangeEvent; |
6 | 4 | import java.util.ArrayDeque; |
7 | 5 | import java.util.ArrayList; |
|
14 | 12 | import java.util.List; |
15 | 13 | import java.util.Map; |
16 | 14 | import java.util.Set; |
17 | | -import javax.swing.JScrollPane; |
18 | 15 | import javax.swing.JTable; |
19 | 16 | import javax.swing.ListSelectionModel; |
| 17 | +import javax.swing.event.ChangeEvent; |
20 | 18 | import javax.swing.event.TableColumnModelListener; |
21 | 19 | import javax.swing.table.DefaultTableColumnModel; |
22 | 20 | import javax.swing.table.TableColumn; |
@@ -57,42 +55,11 @@ public void propertyChange( PropertyChangeEvent e ) { |
57 | 55 | if ( ( ( Integer )e.getNewValue() ).intValue() == ( Integer )e.getOldValue() ) |
58 | 56 | return; |
59 | 57 | totalColumnWidth = -1; |
60 | | - JBroTableColumn column = ( JBroTableColumn )e.getSource(); |
61 | | - Enumeration< TableColumn > cols = getColumns(); |
62 | | - int x = 0; |
63 | | - while ( cols.hasMoreElements() ) { |
64 | | - TableColumn col = cols.nextElement(); |
65 | | - if ( col == column ) |
66 | | - break; |
67 | | - x += col.getWidth(); |
68 | | - } |
69 | | - JBroTableHeader header = table.getTableHeader(); |
70 | | - if ( table.isEditing() && !table.getCellEditor().stopCellEditing() ) |
71 | | - table.getCellEditor().cancelCellEditing(); |
72 | | - Container parent = table.getParent() == null ? null : table.getParent().getParent(); |
73 | | - if ( table.getAutoResizeMode() == JTable.AUTO_RESIZE_OFF && header != null && header.getResizingColumn() == column && ( parent == null || parent instanceof JScrollPane ) ) { |
74 | | - if ( column.getPreferredWidth() != column.getWidth() ) { |
75 | | - Dimension size = table.getPreferredSize(); |
76 | | - int oldW = column.getPreferredWidth(); |
77 | | - column.setPreferredWidth( column.getWidth() ); |
78 | | - int newW = column.getPreferredWidth(); |
79 | | - size.width += newW - oldW; |
80 | | - table.setPreferredSize( size ); |
81 | | - if ( parent != null ) { |
82 | | - JScrollPane scrollPane = ( JScrollPane )parent; |
83 | | - scrollPane.getHorizontalScrollBar().getModel().setMaximum( size.width ); |
84 | | - } |
85 | | - } |
86 | | - } else |
87 | | - table.revalidate(); |
88 | | - if ( header == null ) |
89 | | - table.repaint( x, 0, table.getWidth() - x, table.getHeight() ); |
90 | | - else { |
91 | | - JBroTableHeaderUI ui = header.getUI(); |
92 | | - header.repaintHeaderAndTable( x, 0, header.getWidth() - x ); |
93 | | - while ( ( column = getColumnParent( column ) ) != null ) |
94 | | - header.repaint( ui.getGroupHeaderBoundsFor( column ) ); |
95 | | - } |
| 58 | + Object listeners[] = listenerList.getListenerList(); |
| 59 | + WidthChangeEvent changeEvent = new WidthChangeEvent( this, ( JBroTableColumn )e.getSource(), ( Integer )e.getOldValue(), ( Integer )e.getNewValue(), "preferredWidth".equals( name ) ); |
| 60 | + for ( int i = listeners.length - 2; i >= 0; i -= 2 ) |
| 61 | + if ( listeners[ i ] == TableColumnModelListener.class ) |
| 62 | + ( ( TableColumnModelListener )listeners[ i + 1 ] ).columnMarginChanged( changeEvent ); |
96 | 63 | } else |
97 | 64 | super.propertyChange( e ); |
98 | 65 | } |
@@ -409,6 +376,37 @@ public TableColumnModel getDelegate( int level ) { |
409 | 376 | return delegates.get( level ); |
410 | 377 | } |
411 | 378 |
|
| 379 | + public static class WidthChangeEvent extends ChangeEvent { |
| 380 | + private final JBroTableColumn column; |
| 381 | + private final int oldWidth; |
| 382 | + private final int newWidth; |
| 383 | + private final boolean preferred; |
| 384 | + |
| 385 | + public WidthChangeEvent( Object source, JBroTableColumn column, int oldWidth, int newWidth, boolean preferred ) { |
| 386 | + super( source ); |
| 387 | + this.column = column; |
| 388 | + this.oldWidth = oldWidth; |
| 389 | + this.newWidth = newWidth; |
| 390 | + this.preferred = preferred; |
| 391 | + } |
| 392 | + |
| 393 | + public JBroTableColumn getColumn() { |
| 394 | + return column; |
| 395 | + } |
| 396 | + |
| 397 | + public int getOldWidth() { |
| 398 | + return oldWidth; |
| 399 | + } |
| 400 | + |
| 401 | + public int getNewWidth() { |
| 402 | + return newWidth; |
| 403 | + } |
| 404 | + |
| 405 | + public boolean isPreferred() { |
| 406 | + return preferred; |
| 407 | + } |
| 408 | + } |
| 409 | + |
412 | 410 | private class DelegateColumnModel implements TableColumnModel { |
413 | 411 | private final int level; |
414 | 412 |
|
|
0 commit comments