1 回答
TA贡献1828条经验 获得超3个赞
你快到了。正如您所指出的,问题在于您使用相同的catch语句来处理所有三个文本字段,而无法确定哪一个有问题。
一个快速(如果有些不雅)的解决方案是使用并行数组迭代文本框并相应地设置每个值:
public void actionPerformed(ActionEvent e) {
JTextField[] fields = {theApp.txtR, theApp.txtG, theApp.txtB};
int[] colourValues = new int[3];
int i = 0;
boolean error = false;
for (JTextField field : fields) {
try {
colourValues[i++] = Integer.parseInt(field.getText());
}
catch (NumberFormatException ex) {
error = true;
field.setText("");
}
}
if (!error) {
theApp.colour = new Color(colourValues[0], colourValues[1], colourValues[2]);
theApp.mainText.setForeground(theApp.colour);
} else {
JOptionPane.showMessageDialog(null, "Please enter integer values in the fields ","Wrong input", JOptionPane.ERROR_MESSAGE);
}
}
如果您想避免并行数组,另一种选择是改用Color(int rgb)构造函数,并在循环的每次迭代中设置适当的组件。
public void actionPerformed(ActionEvent e) {
JTextField[] fields = {theApp.txtR, theApp.txtG, theApp.txtB};
int rgb = 0, i = 0;
boolean error = false;
for (JTextField field : fields) {
try {
rgb |= (Integer.parseInt(field.getText())) << (16 - i);
i += 8;
}
catch (NumberFormatException ex) {
error = true;
field.setText("");
}
}
if (!error) {
theApp.colour = new Color(rgb);
theApp.mainText.setForeground(theApp.colour);
} else {
JOptionPane.showMessageDialog(null, "Please enter integer values in the fields ","Wrong input", JOptionPane.ERROR_MESSAGE);
}
}
另请注意,在验证每个值都是整数之后,您还需要验证它们是否介于 0 和 255 之间。
添加回答
举报