首頁 > Java > java教程 > 如何限制 JTextField 只接受正整數?

如何限制 JTextField 只接受正整數?

Mary-Kate Olsen
發布: 2024-12-26 13:41:09
原創
613 人瀏覽過

How Can I Restrict a JTextField to Accept Only Positive Integers?

將JTextField 輸入限制為整數

將JTextField 輸入限制為僅接受正整數的任務是經常遇到的需求,但要實現此限制可能會帶來挑戰。正如最初嘗試的那樣,為此目的使用 KeyListener 有幾個缺點。

使用 KeyListener 的缺點:

  • 無法擷取所有輸入: KeyListener僅檢測擊鍵,但不會處理透過複製和貼上輸入的數據,這可以繞過
  • 低階控制: KeyListener 在低抽象層級上運行,使其不太適合Swing應用程式.

解決方案: DocumentFilter

更好的方法是使用 DocumentFilter。此 Swing 元件可讓您過濾文字元件的內容,從而精確控制可以輸入的內容。

工作原理:

DocumentFilter 允許您檢查文字元件內容的任何傳入變更。透過檢查修改後的字串是否代表有效整數,您可以接受或拒絕更改。

範例實作:

以下程式碼片段示範如何實作將輸入限制為整數的DocumentFilter:

import javax.swing.text.DocumentFilter;
import javax.swing.text.BadLocationException;

public class MyIntFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string,
                            AttributeSet attr) throws BadLocationException {
        Document doc = fb.getDocument();
        StringBuilder sb = new StringBuilder();
        sb.append(doc.getText(0, doc.getLength()));
        sb.insert(offset, string);

        if (test(sb.toString())) {
            super.insertString(fb, offset, string, attr);
        } else {
            // Handle invalid input, e.g., display an error message
        }
    }

    private boolean test(String text) {
        try {
            Integer.parseInt(text);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}
登入後複製

透過將此DocumentFilter:

透過將此DocumentFilter:透過將此DocumentFilter:透過將此DocumentFilter 附加到您的JTextField,您可以確保僅有效允許輸入整數。

以上是如何限制 JTextField 只接受正整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板