名前付きの「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 を使用しています。