停止或取消编辑单元格时生成输出

时间:2013-07-06 07:43:50

标签: java swing jtable celleditorlistener

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

0 个答案:

没有答案