我有一个JFrame
名为“NewJFrame”,其中包含一个JTable
名为“inputTable”。我有一个名为“myeditor1”的编辑器,它是 MyEditor 类的一个实例,定义如下:
private static class MyEditor extends DefaultCellEditor {
public MyEditor(){
super(new JTextField());
}
}
我已经定义了一个类“MyCellEditorListener”,如下所示:
public class MyCellEditorListener implements CellEditorListener{
public MyCellEditorListener(){
}
@Override
public void editingStopped(ChangeEvent e) {
System.out.println("Editing has been stopped");
}
@Override
public void editingCanceled(ChangeEvent e) {
System.out.println("Editing has been canceled");
}
}
inputTable的模型如下:
inputTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
) {
Class[] types = new Class [] {
java.lang.Integer.class, java.lang.Float.class, java.lang.Object.class, java.lang.Object.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
NewJFrame 的构造函数是:
public NewJFrame() {
initComponents();
MyEditor myeditor1 = new MyEditor();
inputTable.setDefaultEditor(Integer.class, myeditor1);
inputTable.setDefaultEditor(Float.class, myeditor1);
myeditor1.addCellEditorListener(new MyCellEditorListener());
}
我的第一个问题是:
每当我停止编辑第二列(类型为Float
)中的任何单元格时,我都会收到一个异常,Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Number
但当我停止编辑第一列(类型为 )的单元格时,这不会发生Integer
。输出“编辑已停止”在第二种情况下显示,但在第一种情况下不显示!为什么会发生这种情况,我该怎么办?
我的第二个问题是:
每当我通过按键取消编辑单元格时,Esc
不会显示“编辑已被取消”的预期输出。为什么 ?ChangeEvent
每当我按下Esc
键时(在编辑 inputTable 的单元格时)不应该触发吗?
提前致谢
PS:我使用的是 Netbeans IDE 7.2 RC1。