Y
yancheng.cheok
Hello all,
In a single column, I wish to have different cell editor. By refering
to,
http://groups.google.com.my/group/c...model+cell+class+type&rnum=7#2adbd3e46e19e521
http://forum.java.sun.com/thread.jspa?forumID=257&threadID=211873
I manage to do the following implementation :
package org.yccheok.jstock.gui;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import org.yccheok.jstock.engine.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
* @author yccheok
*/
public class IndicatorJTable extends JTable {
/** Creates a new instance of IndicatorJTable */
public IndicatorJTable() {
}
public TableCellRenderer getCellRenderer(int row, int column)
{
final int modelRow = this.convertRowIndexToModel(row);
final int modelcolumn =
this.convertColumnIndexToModel(column);
return this.getDefaultRenderer(getModel().getValueAt(modelRow,
modelcolumn).getClass());
}
@Override
public TableCellEditor getCellEditor(int row, int column) {
final int modelRow = this.convertRowIndexToModel(row);
final int modelcolumn =
this.convertColumnIndexToModel(column);
return this.getDefaultEditor(getModel().getValueAt(modelRow,
modelcolumn).getClass());
}
private static final Log log =
LogFactory.getLog(IndicatorJTable.class);
}
with my own custom Table model.
When the JTable first display, it look fine. The cell which is being
specific as Double.class type, the display is correct :
Double, Float - same as Number, but the object-to-text translation is
performed by a NumberFormat instance (using the default number format
for the current locale).
When I double click on the cell specific as Double.class, and try to
enter non-numerical value and press enter, there suppose to be a red
border around, and doesn't allow my newly enter non-double value to be
written to the table. However, that is not the case, I am able to
write non-double value into the cell which is specific as Double.class
type.
I realize that my overridden getCellRenderer and getCellEditor in
JTable, able to return me a correct Double type renderer and cell
editor. However, the getColumnClass in table model, is unable to
return class specific to a particular cell. When editing process
start, JTable will also try to query information from Table Model
getColumnClass, which in turn will return String (Of course, I just
cann't make the particular column to return class Double. There are
other cell which is not Double)
public Class getColumnClass(int c) {
return super.getColumnClass(c);
}
This make the editing process behave incorrect. Please refer to the
following bug database related the design of table model.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801881
May I know does any of you figure out a workaround on this?
Thank you very much!
cheok
In a single column, I wish to have different cell editor. By refering
to,
http://groups.google.com.my/group/c...model+cell+class+type&rnum=7#2adbd3e46e19e521
http://forum.java.sun.com/thread.jspa?forumID=257&threadID=211873
I manage to do the following implementation :
package org.yccheok.jstock.gui;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import org.yccheok.jstock.engine.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
* @author yccheok
*/
public class IndicatorJTable extends JTable {
/** Creates a new instance of IndicatorJTable */
public IndicatorJTable() {
}
public TableCellRenderer getCellRenderer(int row, int column)
{
final int modelRow = this.convertRowIndexToModel(row);
final int modelcolumn =
this.convertColumnIndexToModel(column);
return this.getDefaultRenderer(getModel().getValueAt(modelRow,
modelcolumn).getClass());
}
@Override
public TableCellEditor getCellEditor(int row, int column) {
final int modelRow = this.convertRowIndexToModel(row);
final int modelcolumn =
this.convertColumnIndexToModel(column);
return this.getDefaultEditor(getModel().getValueAt(modelRow,
modelcolumn).getClass());
}
private static final Log log =
LogFactory.getLog(IndicatorJTable.class);
}
with my own custom Table model.
When the JTable first display, it look fine. The cell which is being
specific as Double.class type, the display is correct :
Double, Float - same as Number, but the object-to-text translation is
performed by a NumberFormat instance (using the default number format
for the current locale).
When I double click on the cell specific as Double.class, and try to
enter non-numerical value and press enter, there suppose to be a red
border around, and doesn't allow my newly enter non-double value to be
written to the table. However, that is not the case, I am able to
write non-double value into the cell which is specific as Double.class
type.
I realize that my overridden getCellRenderer and getCellEditor in
JTable, able to return me a correct Double type renderer and cell
editor. However, the getColumnClass in table model, is unable to
return class specific to a particular cell. When editing process
start, JTable will also try to query information from Table Model
getColumnClass, which in turn will return String (Of course, I just
cann't make the particular column to return class Double. There are
other cell which is not Double)
public Class getColumnClass(int c) {
return super.getColumnClass(c);
}
This make the editing process behave incorrect. Please refer to the
following bug database related the design of table model.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801881
May I know does any of you figure out a workaround on this?
Thank you very much!
cheok