簡體   English   中英

如何限制用戶僅輸入數字?

[英]How to limit user to input only numbers?

我當前正在創建此Java GUI,將要求用戶輸入10個條目,然后使用這些值執行下一步操作。

我只希望在其中輸入數字或小數點,使其只能是浮點值。

如果不是數字或小數點,則應提示用戶在執行下一個操作之前再次輸入該特定條目。

我該怎么辦?

不知道您是否正在使用Swing ...

幾年前,我遇到了同樣的問題,我通過創建一個擴展了JTextField的RestrictedTextField類解決了它。 在構造函數中,我添加了一個鍵偵聽器(addKeyListener(new RestrictedKeyAdapter());)

private class RestrictedKeyAdapter extends KeyAdapter {

    @Override
    public void keyReleased(KeyEvent e) {

        if (getText().equals("")) {
            oldString = "";
            return;
        } else {
            // if you cannot parse the string as an int, or float, 
            // then change the text to the text before (means: ignore
            // the user input)
            try {
                if (type.equals("int")) {
                    int i = Integer.parseInt(getText());
                    oldString = getText();
                } else if (type.equals("float")) {
                    float f = Float.parseFloat(getText());
                    oldString = getText();
                } else {
                    // do nothing
                }
            } catch (NumberFormatException el) {
                setText(oldString);
            }

            // if the text is identical to the initial text of this
            // textfield paint it yellow. If the text was changed
            // paint it red.
            if (initialString.equals(getText())) {
                setForeground(Color.YELLOW);
            } else {
                setForeground(Color.RED);
            }
        }
    }
}

這個想法是,每次用戶在文本字段中按下一個鍵(然后釋放它)時,都會分析該文本字段中的文本。 例如,如果組件只接受浮點數,則組件將嘗試將其解析為浮點數(Float.parseFloat(..))。 如果此解析成功,則一切正常。 如果解析失敗(引發NumberFormatException),則舊文本將寫回到文本字段中(實際上忽略用戶輸入)。

我認為您可以將KeyAdapter直接添加到JTextField,而無需為此創建專用的類,但是使用此解決方案,您可以記住初始字符串和舊字符串。

您可以嘗試使用代碼。.如果輸入有效或無效,則可以更改文本字段的顏色(或者,如果文本與初始字符串相同,則可以更改代碼段的顏色)。

另一條評論:我將文本字段的“類型”設置為名稱為“ type”的變量,該變量只是一個字符串,其值為“ int”,“ float”等。例如一個枚舉

我希望這是有幫助的...

提摩

您想做什么有很多選擇。 您可以在此處查看這樣做的一個示例。 另一個例子是使用格式化的TextField,如圖所示這里

另一方面,提交后,您可以嘗試將值解析為floatdouble 如果有任何異常,則該值不是數字。

最后,您可以使用正則表達式。 諸如^\\\\d+(\\\\.\\\\d+)?$類的表達式應匹配任何整數或浮點數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM