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

时间:2017-05-10 09:29:54

标签: java jlist

我正在编写一个程序,根据用户在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();

3 个答案:

答案 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;}