我不知道如何验证这一点,以便如果找不到id值,我可以说ID值不存在。我有一个带有数据库的GUI功能,你在其中输入某人的id(属性)并返回其他信息(姓名,姓名等)但是当找不到id时我的程序崩溃了,我不太确定如何制作这样我就可以在找不到id时使用JOption窗格。
int id = Integer.parseInt(jTextField15.getText());
Person updatePerson = new Person();
for (Person person : personList)
{
if (person.getPersonid() == id)
{
updatePerson = person;
}
}
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
该程序似乎工作,但我找不到ID后,在线程消息中得到一个异常:
线程“AWT-EventQueue-0”中的异常java.lang.IllegalArgumentException:非法值
任何帮助解释这是什么以及如何解决它以及能够向用户打印消息将非常感激
答案 0 :(得分:0)
我假设你的意思是: 当我查找一个元素并且找不到它时,我应该在GUI中做什么。
您可以采取两种方法:
1:省略元素。这对于html和其他生成的用户界面(通常)效果很好。在循环之后,检查updatePerson == null,如果是,则跳过生成html元素(或文本字段等)
2:对于GUI,您通常使用默认值。这可以通过以下两种方式之一完成:您为每个字段使用默认值,或者创建虚拟对象。
int id = Integer.parseInt(jTextField15.getText());
Person updatePerson = null;
for (Person person : personList)
{
if (person.getPersonid() == id)
{
updatePerson = person;
break; // with break: get first found, without break: get last found.
// this depends on whether it is possible to have a person show up more than once.
}
}
if (person == null) {
jTextField11.setText("");
jTextField11.setVisible(false); // setting fields to empty, in case logic
jTextField17.setText(""); // is using them or if someone
jTextField17.setVisible(false); // sets visible true before setting text
jTextField12.setText(""); // as you don't want to output wrong data
jTextField12.setVisible(false); // even for a flicker of a second
jTextField16.setText("");
jTextField16.setVisible(false);
jSpinner5.setValue(SOME_GLOBAL_DEFAULT_DATE); // ie. 0 or 1970-01-01
jSpinner5.setVisible(false);
} else {
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
}
或者你可以做(留下字段,但是空的)
int id = Integer.parseInt(jTextField15.getText());
Person updatePerson = new Person(); // default constructor initializes with empty of default values
for (Person person : personList)
{
if (person.getPersonid() == id)
{
updatePerson = person;
break; // with break: get first found, without break: get last found.
// this depends on whether it is possible to have a person show up more than once.
}
}
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
写这篇文章的时候,我意识到我最终会做第三种与第一种方法有关的方法:
if (updatePerson == null) {
panelContainingFields.setVisible(false);
} else {
jTextField11.setText(updatePerson.getFirstname());
jTextField17.setText(updatePerson.getSurname());
jTextField12.setText(updatePerson.getPersontype());
jTextField16.setText(updatePerson.getGender());
jSpinner5.setValue(updatePerson.getDateofbirth());
panelContainingFields.setVisible(true);
}
只需将您使用的所有字段放在面板中,并在没有元素时隐藏面板。