Вонг,
не уверены, используете ли вы свинг или нет ...
века назад у меня была такая же проблема, и я решил его с созданием класса RestrictedTextField простирающуюся JTextField. В конструкторе я добавил ключ слушателя (addKeyListener (новый 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 (Float.parseFloat (..)). Если этот синтаксический анализ удался, все в порядке. Если синтаксический анализ не выполняется (исключение NumberFormatException), старый текст записывается обратно в текстовое поле (буквально игнорируя ввод пользователя).
Я думаю, что вы можете добавить KeyAdapter непосредственно в JTextField, не создавая для этого выделенный класс, но с помощью этого решения вы можете вспомнить начальную строку и старую строку.
вы можете поиграть с кодом .. вы можете изменить цвет текстового поля, если вход действителен или нет (или как в моем фрагменте кода, если текст идентичен исходной строке).
один дополнительный комментарий: я задал «тип» текстового поля в переменной с именем «type», который представляет собой просто строку со значениями «int», «float» и т. Д. ... лучше решение будет здесь, например, перечисление конечно ...
Я надеюсь, что это полезно ...
Timo
http://docs.oracle.com/javase/tutorial/uiswing/components /formattedtextfield.html – maialithar
Вы используете качели или апплет? – Jayy