2

重複の可能性:
JTextField入力を整数に制限する
JTextFieldの「選択解除」イベントを検出する

JTextFieldユーザーが数字以外の文字を入力した場合にユーザーが整数値のみを入力できるようにすることで、を検証する必要があります。入力さJOptionPane.showれた値が正しくなく、整数のみが許可されていることを示すメッセージボックスが表示されます。数字の値にコーディングしましたが、アルファベットも破棄する必要があります

public void keyPressed(KeyEvent EVT) {
    String value = text.getText();
    int l = value.length();
    if (EVT.getKeyChar() >= '0' && EVT.getKeyChar() <= '9') {
        text.setEditable(true);
        label.setText("");
    } else {
        text.setEditable(false);
        label.setText("* Enter only numeric digits(0-9)");
    }
}
4

3 に答える 3

6

JFormattedTextFieldを使用する代わりに、整数のみを許可するドキュメントを使用してカスタムJTextFieldを作成できます。私はより複雑なマスクのためだけにフォーマットされたフィールドが好きです...見てください。

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

/**
 * A JTextField that accepts only integers.
 *
 * @author David Buzatto
 */
public class IntegerField extends JTextField {

    public IntegerField() {
        super();
    }

    public IntegerField( int cols ) {
        super( cols );
    }

    @Override
    protected Document createDefaultModel() {
        return new UpperCaseDocument();
    }

    static class UpperCaseDocument extends PlainDocument {

        @Override
        public void insertString( int offs, String str, AttributeSet a )
                throws BadLocationException {

            if ( str == null ) {
                return;
            }

            char[] chars = str.toCharArray();
            boolean ok = true;

            for ( int i = 0; i < chars.length; i++ ) {

                try {
                    Integer.parseInt( String.valueOf( chars[i] ) );
                } catch ( NumberFormatException exc ) {
                    ok = false;
                    break;
                }


            }

            if ( ok )
                super.insertString( offs, new String( chars ), a );

        }
    }

}

NetBeansを使用してGUIを構築している場合は、通常のJTextFieldsをGUIに配置するだけで、作成コードでIntegerFieldのコンストラクターを指定します。

于 2013-01-14T13:17:04.343 に答える
1

そのためのコンポーネントがあります:フォーマットされたテキストフィールド: http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html

于 2013-01-14T13:16:35.577 に答える
1

機能を使用JFormattedTextFieldします。を見てください。

于 2013-01-14T13:16:46.193 に答える