ホームページ >Java >&#&チュートリアル >JTextField 入力を整数のみに効果的に制限するにはどうすればよいですか?
JTextField コントロールでのユーザー入力を正の整数に制限することは、プログラミングにおける一般的な問題です。この目的で KeyListener を利用しようとしましたが、より効果的なアプローチがあります。
KeyListener に依存するのとは対照的に、DocumentFilter を実装すると、いくつかの利点があります。
DocumentFilter を使用してこれを実装するには、次のことを考慮してください。例:
import javax.swing.text.PlainDocument; import javax.swing.text.DocumentFilter; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; class IntDocumentFilter extends PlainDocument { @Override public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { if (string == null || string.isEmpty()) { super.insertString(fb, offset, string, attr); } else { try { Integer.parseInt(string); super.insertString(fb, offset, string, attr); } catch (NumberFormatException e) { // warn the user and don't allow the insert } } } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { if (text == null || text.isEmpty()) { super.replace(fb, offset, length, text, attrs); } else { try { Integer.parseInt(text); super.replace(fb, offset, length, text, attrs); } catch (NumberFormatException e) { // warn the user and don't allow the insert } } } }
このフィルターを使用するには、フィルターをインスタンス化し、JTextField に関連付けられた PlainDocument オブジェクトに設定します:
JTextField textField = new JTextField(); PlainDocument doc = (PlainDocument) textField.getDocument(); doc.setDocumentFilter(new IntDocumentFilter());
この実装:
これらの手法により、入力が目的の制約に従っていることを確認し、JTextField が受け入れるデータのタイプを制御できるようにします。
以上がJTextField 入力を整数のみに効果的に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。