0

我有一个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。

4

0 回答 0