Java のキー入力制限とフィールド入力制限


ブラウザでダウンロード
addKeyListener と setInputVerifier
addKeyListener でキーイベントを3種類処理可能ですが、
3つとも consume() する事によってキー入力がキャンセルされます。

ユーザーコントロール内に実装すれば、もっとすっきりするとは思いますが、
他のキーコントロールの都合を考えると、外側に全て書いてしまうほうが良いと思います。

また、フォーカスが移動するタイミングでチェックする InputVerifier もあるので、
やはり、フィールド単位で書き込むほうが良いと思います。

あるいは、一つのフィールドに対して外部パッケージに一つのクラスを作成して、
管理しても良いかもしれません。
01.//*************************************************
02.// 入力制限用クラス
03.//*************************************************
04.class num1Verifier extends InputVerifier {
05.    public boolean verify( JComponent target ) {
06.        JTextField check = (JTextField)target;
07. 
08.        String str = check.getText();
09.        if ( str.equals("1") ) {
10.            return true;
11.        }
12. 
13.        return false;
14.    }
15.}
16. 
17.//*************************************************
18.// テキストフィールド
19.//*************************************************
20.private boolean chk_TextField = true;
21.private JTextField getJTextField() {
22.    if (jTextField == null) {
23.        jTextField = new JTextField();
24.        jTextField.setBounds(new Rectangle(125, 26, 71, 27));
25.        //*************************************************
26.        // フォーカス移動時の入力制限
27.        //*************************************************
28.        jTextField.setInputVerifier(new num1Verifier());
29.        //*************************************************
30.        // キー入力制限
31.        //*************************************************
32.        jTextField.addKeyListener(new java.awt.event.KeyAdapter() {
33.            public void keyPressed(java.awt.event.KeyEvent e) {
34.                Main.this.chk_TextField = chkTextField( e.getKeyCode() );
35.                if ( !Main.this.chk_TextField ) {
36.                    e.consume();
37.                }
38.            }
39.        });
40.        jTextField.addKeyListener(new java.awt.event.KeyAdapter() {
41.            public void keyReleased(java.awt.event.KeyEvent e) {
42.                if ( !Main.this.chk_TextField ) {
43.                    e.consume();
44.                }
45.            }
46.        });
47.        jTextField.addKeyListener(new java.awt.event.KeyAdapter() {
48.            public void keyTyped(java.awt.event.KeyEvent e) {
49.                if ( !Main.this.chk_TextField ) {
50.                    e.consume();
51.                }
52.            }
53.        });
54. 
55.    }
56.    return jTextField;
57.}
58.//*************************************************
59.// キー入力制限
60.//*************************************************
61.private boolean chkTextField( int keyCode ) {
62.    // System.out.println( keyCode );
63.    // BS・LEFT・RIGHT
64.    if ( keyCode == 8 || keyCode == 0x25 || keyCode == 0x27 ) {
65.        return true;
66.    }
67.    // 入力データ量の制限
68.    if ( jTextField.getText().length() == 1 ) {
69.        return false;
70.    }
71.    // テンキー
72.    if ( 96 <= keyCode && keyCode <= 105 ) {
73.        return true;
74.    }
75.    // 0~9
76.    if ( 48 <= keyCode && keyCode <= 57 ) {
77.        return true;
78.    }
79.    return false;
80.}