如果Jlist中没有选择任何内容
我正在编写一个程序,根据用户在JList中选择的内容在图像上绘制不同的符号。这工作正常,但我的问题是,如果没有在JList中选择任何内容,我想要在图像上放置一个符号。有没有办法检查选择是否为空?这是我现在的代码,如果我不从JList中选择任何东西,它会抛出一个NullPointerException异常。如果Jlist中没有选择任何内容
if(categoriesList.getSelectedValue().equals("Bus")) {
BusSymbol bs = new BusSymbol(x, y);
mp.add(bs);
}
else if
(categoriesList.getSelectedValue().equals("Underground")) {
UndergroundSymbol us = new UndergroundSymbol(x,y);
mp.add(us);
}
else if (categoriesList.getSelectedValue().equals("Train")) {
TrainSymbol ts = new TrainSymbol(x,y);
mp.add(ts);
}
else if (categoriesList.getSelectedValue().equals(null)) {
NoCategorySymbol ncs = new NoCategorySymbol(x,y);
mp.add(ncs);
}
mp.validate();
mp.repaint();
您应该使用JList.isSelectionEmpty()
作为条件,而不是使用可能为null
的值进行测试。
您应该使这个测试第一,和/或改变都具有这个不幸的语法其他测试:
mightBeNull.equals(neverNull)
一般来说它是一般最好避免这种语法和使用neverNull.equals(mightBeNull)
相反,因为它避免了试图调用不确定的null.equals()
方法。
我提出以下代码:
if (categoriesList.isSelectionEmpty()) {
mp.add(new NoCategorySymbol(x,y));
} else {
// here we know categoriesList.getSelectedValue() isn't null
String selectedValue = categoriesList.getSelectedValue());
if ("Underground".equals(selectedValue)) {
mp.add(new UndergroundSymbol(x,y));
} else if ("Train".equals(selectedValue)) {
mp.add(new TrainSymbol(x, y));
}
}
mp.validate();
mp.repaint();
不能检查使用.equals
你需要使用==
空值。
categoriesList.getSelectedValue() == null
这是因为.equals
在对象上调用方法。如果对象为空,则不能这样做。
public boolean isElementSelected(){ return categoriesList.getSelectedValue() == null;}
感谢您使用此代码段,它可能会提供一些即时帮助。通过展示*为什么*这是一个很好的解决问题的方法,并且使它对未来的读者更有用,但是它的教育价值会得到很好的解释[//会大大提高](// meta.stackexchange.com/q/114762)不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –
这是因为'null'没有'.equals'方法。如果什么东西可能为空,你想用'== null'来检查它(或者理想情况下用另一种方法;在那个API上没有'hasSelectedValue()'方法吗?) – Aaron