JTableに対して起動時に
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
http://terai.xrea.jp/Swing/TerminateEdit.html
の設定を一行追加で全部済むかと思いきや、これをやるとグリッドの挙動が1クリックで編集状態にならないので、マウスの右ボタン押下時に
if(table.isEditing()) {
table.getCellEditor().stopCellEditing();
}
他にも実はこれが必要な処理があるかも知れない。メニューのコピー/カット/削除あたりが怪しい。ストップウォッチも。
しかしまー我ながら色々潜在バグがあるものだ。
↓
今気が付いたけど「しおり追加」が動かない。なんだろな。多分「移動」があやしい→直った。が、今度は終了時にセーブ確認で取り消し選ぶと終了してしまうというマズいバグが見つかった。3択ダイアログは全般にチェックが必要だ。→ファイルメニューからだと正常動作、左上の「×」クリックだと終了。そもそもそれっぽい処理は正しく入っている。
コンストラクタの最初で
/* 終了処理を追加 */ addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { int ret = MenuFileExit(); if(ret == JOptionPane.CANCEL_OPTION){ return; } System.exit(0); } });
とやってるけど、どうやらこの終了時処理に入っている時点でSystem.exit(0);せずとも、必ず終了する運命らしい。×ボタンクリックを先にどこかでインターセプトする?
しかし変だなー昔はこれ自分でわざわざSystem.exit()しないと終了しなかった気がするんだけど。
→面倒くさいから「×」を押した場合は「セーブする/しない」の二択にして「取り消し」はなしにしてしまうか。
コメント