- - PR -
JTableのセルのスピンボックスの動作について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-31 23:52
JDK1.4にてアプレットの開発を行っています。
JSpinner型のセルエディタクラスを作成し、JTableにスピンボックスセルを 作成しました。 このスピンボックスですが、値を直接入力しEnterキーを押下すると入力した値が 確定されますが、直接入力後Tabキー又はマウスでスピンボックスからフォーカスアウトすると 入力した値が確定されず、変更前の値に戻ってしまいます。 直接入力後、フォーカスアウト時変更した値を確定させるにはどのようにしたらよいのでしょうか? どなたか教えて下さい。 下記、スピンボックス型のセルエディタクラスのソースです。 ------------------------------------------------------------------------------- private static class CommonJSpinnerEditor extends AbstractCellEditor implements TableCellEditor { private JSpinner field = new JSpinner(); public JSpinnerEditor(JSpinner spinner) { field = spinner; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { setValue(value); return field; } public Object getCellEditorValue() { return field.getValue(); } private void setValue(Object data) { field.setValue((Double)data); } } ------------------------------------------------------------------------------- | ||||
|
投稿日時: 2007-04-01 18:02
JSpinnerを複数生成しているところがおかしいですね。
セルエディタもJSpinnerも使い回しされるので1つだけオブジェクトを生成すればOKです。その辺に原因があるのではないでしょうか? 以下が私が試したソースです。
| ||||
|
投稿日時: 2007-04-04 07:51
a-sanさん、返信ありがとうございます。
a-sanのソースで動作を確認したところ、やはり直接入力後Tabキーを押下 又はマウスで別のセルをクリックすると入力前の状態に戻ってしまいます。 JSpinnerにChangeLisnerを追加しSystem.out.printを入れてみたら Tabキーを押下、マウスで別セルをクリックすると @getCellEditorValue() AstateChanged(ChangeEvent e) の順にイベントが発生していました。 セルエディタのイベントの前にスピンボックスのイベントを発生出来ないのでしょうか? すみませんが、よろしくお願いします。 | ||||
|
投稿日時: 2007-04-04 21:15
再現方法を勘違いしていました。たしかに、私のソースでも再現します。
以下のように修正すればよいでしょう。 それと、値がDoubleなら明示的にSpinerModelを実数として指定しないと、Integerが格納されてしまうときがあるようです。
http://www.hcn.zaq.ne.jp/no-ji/javamemo/javax_swing_table_TableCellEditor.html [ メッセージ編集済み 編集者: a-san 編集日時 2007-04-04 21:17 ] |
1