如果在 Jlist 中没有选择任何内容

If nothing is selected in Jlist

我正在编写一个程序,根据用户 select 在 JList 中的内容在图像上绘制不同的符号。这工作正常,但我的问题是如果 JList 中也没有 selected,我想在图像上放置一个符号。有什么方法可以检查 selection 是否为空?这是我现在的代码,如果我不 select 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();

您不能使用 .equals 检查空值,您需要使用 ==

categoriesList.getSelectedValue() == null

这是因为.equals调用了对象的方法。如果对象为 null,则不能这样做。

您应该使用 JList.isSelectionEmpty() 作为条件,而不是针对可能是 null.

的值进行测试

您应该先进行此测试,and/or 更改所有其他具有这种不幸语法的测试:

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();
public boolean isElementSelected(){ return categoriesList.getSelectedValue() == null;}