在 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中文網其他相關文章!