Spinner and TableEvent
I have a table cell that uses a JSpinner. Everytime I change the value of that cell, either to increase or decrease its value, the TableEvent is never get fired.
It's fired ONLY when I click outside that cell.
Here is a snippet of my code :
publicclass SpinnerRendererextends JSpinnerimplements TableCellRenderer{
public SpinnerRenderer(){
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,boolean hasFocus,int row,int column){
setValue(value);
fireStateChanged();
returnthis;
}
}
publicclass SpinnerEditorextends AbstractCellEditorimplements TableCellEditor{
protected JSpinner spinner =new JSpinner();
public SpinnerEditor(){
spinner.setModel(new SpinnerNumberModel(1, 0, 999, 1));
}
publicboolean stopCellEditing(){
if (!isCommitted()){
returnfalse;
}
return super.stopCellEditing();
}
protectedboolean isCommitted(){
try{
spinner.commitEdit();
}catch (Exception ex){
ex.printStackTrace();
}
returntrue;
}
public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected,int row,int column){
spinner.getModel().setValue(value);
return spinner;
}
publicboolean isCellEditable(EventObject evt){
returntrue;
}
public Object getCellEditorValue(){
Object obj = spinner.getValue();
return obj;
}
}
publicclass MyTableModelextends AbstractTableModel{
...
publicvoid initColumnModel(TableColumn pColumn,int pColIndex){
switch (pColIndex){
case 1:
pColumn.setCellEditor(new SpinnerEditor());
pColumn.setCellRenderer(new SpinnerRenderer());
break;
default:
return;
}
}
publicvoid setValueAt(Object pObject,int pRow,int pCol){
...
switch (pCol){
case 1:
mydata.setNumberOfPages(((Integer) pObject).intValue());
fireTableCellUpdated(pRow, pCol);
break;
default:
return;
}
}
...
}
publicclass MyPanelextends JPanel{
...
private MyTableModel model =new MyTableModel();
public MyPanelX(){
model.addTableModelListener(new TableModelListener(){
publicvoid tableChanged(TableModelEvent e){
log.debug("==> TableModelEvent : " + e.getSource());
if (e.getType() == TableModelEvent.UPDATE){
int row = e.getFirstRow();
int column = e.getColumn();
if (column == 1){
log.info("==> tableChanged on column 1 detected.");
}
}
}
});
}
...
How can I fire a TableEvent or any event every time I key a value or click on the up-arrow or down-arrow of the spinner ? What am I missing ?
Thanks for any help/suggestions.

