我正在使用RGB输入制作换色器,我想在解析时确保输入是整数。如果其中一个RGB值不可解析,那么它应该清除该字段但保留解析正常的字段。我的代码有效,但我必须使用3个try / catch语句,但我希望将其减少为1。如果可能的话,我如何合并所有这三个?
答案 0 :(得分:1)
如果可能,我如何合并所有这三个?
将公共代码移动到辅助方法。我也加了价值范围检查。
isWait
private static int getChannelValue(JTextField field) {
String error;
try {
int value = Integer.parseInt(field.getText());
if (value >= 0 && value <= 255)
return value;
error = "Out of range";
} catch (NumberFormatException f) {
error = "Not an integer number";
}
JOptionPane.showMessageDialog(null, "No. " + error);
field.setText("");
return -1; // invalid
}
答案 1 :(得分:0)
我假设您在点击JButton后收集所有这些值?好吧,而不是这样做,为什么不在客户端完成写入TextFields时存储值,然后在该特定字段上使用parseInt?
field.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) { }
@Override
public void focusLost(FocusEvent e) {
// parse and store int here
}
});
答案 2 :(得分:0)
由于Color只接受整数0-255,因此您可以使用regex
inputString.matches("[12]?\\d?\\d")
正则表达式接受第一个数字的1/2 /无,第二个数字的数字或任何内容,并且需要第三个数字
这适用于0-255,但也接受05,00和260之类的数字(但不是005,除非你做[012]
),但是Integer.parseInt()
会把它们弄清楚
您可能还希望排除260之类的值,其中包含:Validate if input string is a number between 0-255 using regex
inputString.matches("1?[0-9]{1,2}|2[0-4][0-9]|25[0-5]"))
将排除260之类的值,但不包括05或00