在我的 Swing 应用程序中,用户必须在切换到下一个窗口之前插入数字和值。现在,作为一个干净的程序应该检查每个输入是否有效,如果无效,则会显示错误消息并且不会打开下一个窗口。
该检查的结构如下(示例):
Button buttonToOpenNextWindow = new JButton("next");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(checkValidty){
// (...)
new WindowA();
frame.dispose(); // (*)
}
}
});
(*) 笔记:我知道多个 JFrame 的原理很丑陋,我正在改变它,但对于这个问题来说这是无关紧要的。
现在这个问题的焦点是这个checkValidity()
,我的结构如下:
private boolean checkValidity(){
// check input 1
try{
Integer.parseInt(textField1.getText());
}catch (NumberFormatException e){
new ErrorDialog("input 1 is invalid!"); // own implemented dialog
return false;
}
// check input 2
try{
Integer.parseInt(textField2.getText());
}catch (NumberFormatException e){
new ErrorDialog("input 2 is invalid!"); // own implemented dialog
return false;
}
// (...)
// check input n
try{
Integer.parseInt(textField_n.getText());
}catch (NumberFormatException e){
new ErrorDialog("input n is invalid!"); // own implemented dialog
return false;
}
return true;
}
这完全按照我想要的方式工作,但是代码本身非常丑陋,因为有多个输入选项,该方法会获得 200、300 或更多行长(因为我不仅检查它是否是一个数字,而且还检查该数字是否有意义)在程序逻辑的上下文中等等)。有 Swing 自己的方法来检查这些事情吗?或者有谁有更好的想法如何使用 split 方法来准确实现此功能?
一种解决方案是使用 Swing 的InputVerifier
验证每个的输入JTextField
用过的。由于每个字段的验证功能都是相同的,因此单个实例可以用于所有组件:
public class MyNumericVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
String text = ((JTextField) input).getText();
try {
Integer.parseInt(text);
} catch (NumberFormatException e) {
return false;
}
return true;
}
}
InputVerifier verifier = new MyNumericVerifier()
textField1.setInputVerifier(verifier);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)