[英]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”等。例如一個枚舉
我希望這是有幫助的...
提摩
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.