Link Here
|
149 |
} |
149 |
} |
150 |
} |
150 |
} |
151 |
|
151 |
|
152 |
private PropertyChangeListener tableSorterListener = new PropertyChangeListener() { |
152 |
private PropertyChangeListener backingTableListener = new PropertyChangeListener() { |
153 |
@Override |
153 |
@Override |
154 |
public void propertyChange(PropertyChangeEvent pce) { |
154 |
public void propertyChange(PropertyChangeEvent pce) { |
155 |
JTable t = (JTable) pce.getSource(); |
155 |
JTable t = (JTable) pce.getSource(); |
Link Here
|
161 |
backingSorter = (RowSorter) pce.getNewValue(); |
161 |
backingSorter = (RowSorter) pce.getNewValue(); |
162 |
backingSorter.addRowSorterListener(rowSorterListener); |
162 |
backingSorter.addRowSorterListener(rowSorterListener); |
163 |
} |
163 |
} |
|
|
164 |
updateRowCount(); |
164 |
} else if (pce.getPropertyName().equals("rowHeight")) { |
165 |
} else if (pce.getPropertyName().equals("rowHeight")) { |
165 |
headerTable.setRowHeight((Integer) pce.getNewValue()); |
166 |
headerTable.setRowHeight((Integer) pce.getNewValue()); |
|
|
167 |
} else if ("model".equals(pce.getPropertyName())) { |
168 |
if(backingTableModel != null) { |
169 |
backingTableModel.removeTableModelListener( |
170 |
tableModelListener); |
171 |
} |
172 |
backingTableModel = (TableModel) pce.getNewValue(); |
173 |
if(backingTableModel != null) { |
174 |
backingTableModel.addTableModelListener(tableModelListener); |
175 |
} |
176 |
updateRowCount(); |
166 |
} |
177 |
} |
167 |
} |
178 |
} |
168 |
}; |
179 |
}; |
|
|
180 |
|
181 |
private void updateRowCount() { |
182 |
ctm.setCount(backingTable.getRowCount()); |
183 |
} |
184 |
|
185 |
private TableModelListener tableModelListener = new TableModelListener() { |
186 |
@Override |
187 |
public void tableChanged(TableModelEvent e) { |
188 |
updateRowCount(); |
189 |
} |
190 |
}; |
169 |
|
191 |
|
170 |
private RowSorterListener rowSorterListener = new RowSorterListener() { |
192 |
private RowSorterListener rowSorterListener = new RowSorterListener() { |
171 |
@Override |
193 |
@Override |
172 |
public void sorterChanged(RowSorterEvent rse) { |
194 |
public void sorterChanged(RowSorterEvent rse) { |
173 |
ctm.setCount(rse.getSource().getViewRowCount()); |
195 |
updateRowCount(); |
174 |
} |
196 |
} |
175 |
}; |
197 |
}; |
176 |
|
198 |
|
Link Here
|
243 |
private final CountingTableModel ctm = new CountingTableModel(); |
265 |
private final CountingTableModel ctm = new CountingTableModel(); |
244 |
private final JXTable headerTable; |
266 |
private final JXTable headerTable; |
245 |
private JXTable backingTable; |
267 |
private JXTable backingTable; |
|
|
268 |
private TableModel backingTableModel; |
246 |
private RowSorter<?> backingSorter; |
269 |
private RowSorter<?> backingSorter; |
247 |
|
270 |
|
248 |
/** |
271 |
/** |
Link Here
|
254 |
* the table for which to produce a row header. |
277 |
* the table for which to produce a row header. |
255 |
*/ |
278 |
*/ |
256 |
public JXTableRowHeader(JXTable table) { |
279 |
public JXTableRowHeader(JXTable table) { |
|
|
280 |
assert table != null: "JXTableRowHeader needs to be instanciated with a JXTable"; |
281 |
|
282 |
this.backingTable = table; |
283 |
this.backingTableModel = table.getModel(); |
284 |
this.backingTableModel.addTableModelListener(tableModelListener); |
285 |
|
286 |
headerTable = new JXTableDecorator(ctm, |
287 |
new JXTableRowHeader.InternalTableColumnModel()); |
257 |
|
288 |
|
258 |
headerTable = new JXTableDecorator(ctm, new JXTableRowHeader.InternalTableColumnModel()); |
289 |
ctm.setCount(backingTable.getRowCount()); |
259 |
|
290 |
backingTable.addPropertyChangeListener(backingTableListener); |
260 |
setTable(table); |
291 |
headerTable.setRowHeight(backingTable.getRowHeight()); |
261 |
|
292 |
headerTable.setSelectionModel(backingTable.getSelectionModel()); |
|
|
293 |
|
262 |
setLayout(new GridLayout(1, 1)); |
294 |
setLayout(new GridLayout(1, 1)); |
263 |
|
295 |
|
264 |
this.headerTable.getModel().addTableModelListener(new JXTableRowHeader.HeaderResizeListener()); |
296 |
this.headerTable.getModel().addTableModelListener( |
|
|
297 |
new JXTableRowHeader.HeaderResizeListener()); |
265 |
this.headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); |
298 |
this.headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); |
266 |
this.headerTable.getTableHeader().setReorderingAllowed(false); |
299 |
this.headerTable.getTableHeader().setReorderingAllowed(false); |
267 |
this.headerTable.getTableHeader().setResizingAllowed(false); |
300 |
this.headerTable.getTableHeader().setResizingAllowed(false); |
Link Here
|
280 |
this.headerTable.setInheritsPopupMenu(true); |
313 |
this.headerTable.setInheritsPopupMenu(true); |
281 |
this.headerTable.setShowGrid(true, true); |
314 |
this.headerTable.setShowGrid(true, true); |
282 |
this.headerTable.setGridColor(ResultSetJXTable.GRID_COLOR); |
315 |
this.headerTable.setGridColor(ResultSetJXTable.GRID_COLOR); |
283 |
this.headerTable.setHighlighters(HighlighterFactory.createAlternateStriping(ResultSetJXTable.ROW_COLOR, ResultSetJXTable.ALTERNATE_ROW_COLOR)); |
316 |
this.headerTable.setHighlighters( |
284 |
} |
317 |
HighlighterFactory.createAlternateStriping( |
|
|
318 |
ResultSetJXTable.ROW_COLOR, ResultSetJXTable.ALTERNATE_ROW_COLOR)); |
319 |
} |
285 |
|
320 |
|
286 |
/** |
321 |
/** |
287 |
* Returns a default renderer to be used when no row header renderer is |
322 |
* Returns a default renderer to be used when no row header renderer is |
Link Here
|
295 |
return new JXTableRowHeader.RowHeaderColumnRenderer(); |
330 |
return new JXTableRowHeader.RowHeaderColumnRenderer(); |
296 |
} |
331 |
} |
297 |
|
332 |
|
298 |
public void setTable(JXTable table) { |
|
|
299 |
if(backingTable != null) { |
300 |
backingTable.removePropertyChangeListener(tableSorterListener); |
301 |
} |
302 |
backingTable = table; |
303 |
if(backingTable != null) { |
304 |
ctm.setCount(backingTable.getRowCount()); |
305 |
backingTable.addPropertyChangeListener(tableSorterListener); |
306 |
headerTable.setRowHeight(backingTable.getRowHeight()); |
307 |
headerTable.setSelectionModel(backingTable.getSelectionModel()); |
308 |
} |
309 |
} |
310 |
|
311 |
@Override |
333 |
@Override |
312 |
public String getToolTipText(MouseEvent event) { |
334 |
public String getToolTipText(MouseEvent event) { |
313 |
return headerTable.getToolTipText(event); |
335 |
return headerTable.getToolTipText(event); |
314 |
} |
336 |
} |
315 |
} |
337 |
} |