1

ユーザーからの入力が整数であるかどうかを確認するためのInputVerifierfor aがあります。jTextFieldそうでない場合は、最後の適切な値に戻したいです。どうすればいいですか?これが私がこれまでに持っているコードです:

class IntegerVerifier extends InputVerifier {

    public boolean verify(JComponent input) {
            JTextField text = (JTextField)input;
            String old = text.getText();
        try {
            Integer.parseInt(text.getText().trim());
        } catch (NumberFormatException e) {
            // this does not work b/c input is not a TextField
            input.setText(old); 
        }
        return true;
    }

}

編集:以下は、私が最終的に解決策として使用したものです。私は実際にこれを最初に試しましたが、うまくいかないようでした。エラーがテストにあることがわかりました。GUIを起動した直後にテキストフィールドを無効な値に変更しようとしましたが、フィールドが空白になります。ただ、GUI起動と同時にテキストフィールドにフォーカスが移ったため、初期値はnullだったと思います。その後の変更は期待どおりに動作しました。

class IntegerVerifier extends InputVerifier {
    public boolean verify(JComponent input) {
        JTextField text = (JTextField) input;
        String old = text.getText();
        try {
            Integer.parseInt(text.getText().trim());
        } catch (NumberFormatException e) {
            text.setText(old);
            //return false; // don't use this otherwise it won't revert the value
        }
        return true;
    }
}
4

2 に答える 2

1

あなたの質問は、コード内のコメントという別の問題を指しています。検証後に古い値を保存し、現在の入力が無効な場合は元に戻す必要があります。text.setText()ではなく、電話する必要がありinput.setText()ます。このようなもの:

class IntegerVerifier extends InputVerifier {
    String lastGood = "";
    public boolean verify(JComponent input) {
        JTextField text = (JTextField)input;
        String value = text.getText().trim();
        try {
            Integer.parseInt(value);
            lastGood = value;
        } catch (NumberFormatException e) {
            text.setText(lastGood);
            // assumed it should return false
           return false;
        }
        return true;
    }
}
于 2010-11-21T16:05:43.697 に答える
0

を渡すのではなくJComponent、文字列値を渡すだけです。

于 2010-11-21T16:09:22.247 に答える