0

名前付きの「inputTable」をJFrame含むJTable名前付きの「NewJFrame」があります。次のように定義されたクラス MyEditor のインスタンスである「myeditor1」という名前のエディターがあります。

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());

}

私の最初の問題は次のとおりです。

2 番目の列 (タイプ ) のセルの編集を停止するたびにFloat、例外Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Numberが発生しますが、最初の列 (タイプ ) のセルの編集を停止しても、これは発生しませんInteger。出力 'Editing has been stopped' は 2 番目のケースでは表示されますが、最初のケースでは表示されません !! なぜこれが起こっているのですか?どうすればよいですか?

私の2番目の問題は次のとおりです。

キーを押してセルの編集をキャンセルするたびにEsc、「編集がキャンセルされました」という期待される出力が表示されません。なんで ?ChangeEventキーを押すたびにEsc(inputTableのセルを編集している間)トリガーされるべきではありませんか?

前もって感謝します

PS : Netbeans IDE 7.2 RC1 を使用しています。

4

0 に答える 0