2010年2月6日土曜日

[java][swing][jspinner]数値以外をブロックするスピナー



JSpinnerで数値以外の入力をブロックしたい人!それは私です。


数値だけを扱うJSpinnerは、モデルにSpinnerNumberModelを使います。最低値が1で増分1で最大が無限とか。これだと直接"abc"と入力されたときは、スピナーからフォーカスが移動したときに、モデルに照会して元の値(数値)に戻す動作をします。


これでは足りない場合の話です。そもそも入力されたくないんだけど、という話です。


---
JComponent editor = spinner2.getEditor();
for(Component c : editor.getComponents()){
//JFormattedTextFieldのインスタンスが1個だけあるということを知っています。
//それがこのコードの前提です。
c.addKeyListener(new KeyAdapter(){
@Override
public void keyTyped(KeyEvent e) {
if(!Character.isDigit(e.getKeyChar())) e.consume();
}
});
}
---


これで数値キーしか入力できません。
どう書いたらハックにならない(API以外のことに依存しない)のか、モヤモヤします。


追加:
文字列をペーストした場合については、ここではサポートしていません。

0 件のコメント:

コメントを投稿