我有一个名为'NewJFrame'的JFrame
,其中包含名为'inputTable'的JTable
。我有一个名为'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
键时(在编辑inputTable的单元格时),是否应该触发Esc
?
提前致谢
P.S:我正在使用Netbeans IDE 7.2 RC1。