我正在编写一个程序,根据用户在JList中选择的内容在图像上绘制不同的符号。这工作正常,但我的问题是,如果在JList中没有选择任何内容,我想在图像上放置一个符号。有没有办法检查选择是否为空?这是我现在的代码,如果我没有从JList中选择任何内容,它会抛出一个NullPointerException。
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();
答案 0 :(得分:0)
您无法使用.equals
检查是否需要使用==
。
categoriesList.getSelectedValue() == null
这是因为.equals
调用了对象的方法。如果对象为null,则无法执行此操作。
答案 1 :(得分:0)
您应该使用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();
答案 2 :(得分:0)
public boolean isElementSelected(){ return categoriesList.getSelectedValue() == null;}