Java 输入JTextField后,如何实时检查异常
假设我有一个输入字段,当按下submit按钮时,它只接受Java 输入JTextField后,如何实时检查异常,java,exception,Java,Exception,假设我有一个输入字段,当按下submit按钮时,它只接受Int 如果字段检查不是int,我怎么能说禁用按钮呢 忽略添加号码按钮,它与此无关 您可以像这样使用DocumentListener: Document document = jTextFiled.getDocument(); document.addDocumentListener(new DocumentListener() { @Override public void insert
Int
如果字段检查不是int
,我怎么能说禁用按钮呢
忽略添加号码按钮,它与此无关
您可以像这样使用DocumentListener
:
Document document = jTextFiled.getDocument();
document.addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
check();
}
@Override
public void removeUpdate(DocumentEvent e) {
check();
}
@Override
public void changedUpdate(DocumentEvent e) {
check();
}
private void check() {
if (!isInteger(jTextFiled.getText())) {
jButton.setEnabled(false);
} else {
jButton.setEnabled(true);
}
}
});
您可以像这样使用DocumentListener
:
Document document = jTextFiled.getDocument();
document.addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
check();
}
@Override
public void removeUpdate(DocumentEvent e) {
check();
}
@Override
public void changedUpdate(DocumentEvent e) {
check();
}
private void check() {
if (!isInteger(jTextFiled.getText())) {
jButton.setEnabled(false);
} else {
jButton.setEnabled(true);
}
}
});
您可以像这样使用DocumentListener
:
Document document = jTextFiled.getDocument();
document.addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
check();
}
@Override
public void removeUpdate(DocumentEvent e) {
check();
}
@Override
public void changedUpdate(DocumentEvent e) {
check();
}
private void check() {
if (!isInteger(jTextFiled.getText())) {
jButton.setEnabled(false);
} else {
jButton.setEnabled(true);
}
}
});
您可以像这样使用DocumentListener
:
Document document = jTextFiled.getDocument();
document.addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
check();
}
@Override
public void removeUpdate(DocumentEvent e) {
check();
}
@Override
public void changedUpdate(DocumentEvent e) {
check();
}
private void check() {
if (!isInteger(jTextFiled.getText())) {
jButton.setEnabled(false);
} else {
jButton.setEnabled(true);
}
}
});
正如其他人已经说过的,这是最好的方法。您需要自定义格式化程序的valueToString
方法,因为NumberFormat通常会忽略尾随字符:
final JButton acceptButton = new JButton("Add Volume");
acceptButton.setEnabled(false);
NumberFormat format = NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(format) {
@Override
public Object stringToValue(String text)
throws ParseException {
ParsePosition pos = new ParsePosition(0);
Object value = getFormat().parseObject(text, pos);
if (value != null && pos.getIndex() >= text.length()) {
return value;
}
throw new ParseException(text, pos.getErrorIndex());
}
};
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(true);
JFormattedTextField field = new JFormattedTextField(formatter);
field.setFocusLostBehavior(JFormattedTextField.COMMIT);
field.addPropertyChangeListener("editValid",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
boolean valid = (Boolean) event.getNewValue();
acceptButton.setEnabled(valid);
}
});
正如其他人已经说过的,这是最好的方法。您需要自定义格式化程序的valueToString
方法,因为NumberFormat通常会忽略尾随字符:
final JButton acceptButton = new JButton("Add Volume");
acceptButton.setEnabled(false);
NumberFormat format = NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(format) {
@Override
public Object stringToValue(String text)
throws ParseException {
ParsePosition pos = new ParsePosition(0);
Object value = getFormat().parseObject(text, pos);
if (value != null && pos.getIndex() >= text.length()) {
return value;
}
throw new ParseException(text, pos.getErrorIndex());
}
};
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(true);
JFormattedTextField field = new JFormattedTextField(formatter);
field.setFocusLostBehavior(JFormattedTextField.COMMIT);
field.addPropertyChangeListener("editValid",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
boolean valid = (Boolean) event.getNewValue();
acceptButton.setEnabled(valid);
}
});
正如其他人已经说过的,这是最好的方法。您需要自定义格式化程序的valueToString
方法,因为NumberFormat通常会忽略尾随字符:
final JButton acceptButton = new JButton("Add Volume");
acceptButton.setEnabled(false);
NumberFormat format = NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(format) {
@Override
public Object stringToValue(String text)
throws ParseException {
ParsePosition pos = new ParsePosition(0);
Object value = getFormat().parseObject(text, pos);
if (value != null && pos.getIndex() >= text.length()) {
return value;
}
throw new ParseException(text, pos.getErrorIndex());
}
};
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(true);
JFormattedTextField field = new JFormattedTextField(formatter);
field.setFocusLostBehavior(JFormattedTextField.COMMIT);
field.addPropertyChangeListener("editValid",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
boolean valid = (Boolean) event.getNewValue();
acceptButton.setEnabled(valid);
}
});
正如其他人已经说过的,这是最好的方法。您需要自定义格式化程序的valueToString
方法,因为NumberFormat通常会忽略尾随字符:
final JButton acceptButton = new JButton("Add Volume");
acceptButton.setEnabled(false);
NumberFormat format = NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(format) {
@Override
public Object stringToValue(String text)
throws ParseException {
ParsePosition pos = new ParsePosition(0);
Object value = getFormat().parseObject(text, pos);
if (value != null && pos.getIndex() >= text.length()) {
return value;
}
throw new ParseException(text, pos.getErrorIndex());
}
};
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(true);
JFormattedTextField field = new JFormattedTextField(formatter);
field.setFocusLostBehavior(JFormattedTextField.COMMIT);
field.addPropertyChangeListener("editValid",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
boolean valid = (Boolean) event.getNewValue();
acceptButton.setEnabled(valid);
}
});
我相信一定有一些onkeypress事件,你可以捕获并检查输入是否有效。啊,这是一个很好的观点,我会研究它的。谢谢。很多方法。写一些特别的代码。使用一个。使用文档过滤器。制作您自己的自定义文档。等等。您可以使用JFormattedTextField
No,这可能是解决此特定问题的最佳选择。我认为试图嗅出关键事件是邪恶的。永远不要这样做,这是一个巨大的混乱。我相信一定有某种onkeypress事件,你可以捕获并检查输入是否有效。啊,这是一个很好的观点,我会研究它的。谢谢。很多方法。写一些特别的代码。使用一个。使用文档过滤器。制作您自己的自定义文档。等等。您可以使用JFormattedTextField
No,这可能是解决此特定问题的最佳选择。我认为试图嗅出关键事件是邪恶的。永远不要这样做,这是一个巨大的混乱。我相信一定有某种onkeypress事件,你可以捕获并检查输入是否有效。啊,这是一个很好的观点,我会研究它的。谢谢。很多方法。写一些特别的代码。使用一个。使用文档过滤器。制作您自己的自定义文档。等等。您可以使用JFormattedTextField
No,这可能是解决此特定问题的最佳选择。我认为试图嗅出关键事件是邪恶的。永远不要这样做,这是一个巨大的混乱。我相信一定有某种onkeypress事件,你可以捕获并检查输入是否有效。啊,这是一个很好的观点,我会研究它的。谢谢。很多方法。写一些特别的代码。使用一个。使用文档过滤器。制作您自己的自定义文档。等等。您可以使用JFormattedTextField
No,这可能是解决此特定问题的最佳选择。我认为试图嗅出关键事件是邪恶的。永远不要那样做,这是一个巨大的混乱。他“可以”,不应该。前面提到的JFormattedTextField可能是一个更好的主意。他“可以”,不应该。前面提到的JFormattedTextField可能是一个更好的主意。他“可以”,不应该。前面提到的JFormattedTextField可能是一个更好的主意。他“可以”,不应该。前面提到的JFormattedTextField可能是一个更好的主意。