jLIST的setSelectedValue方法出错

时间:2011-07-12 10:57:14

标签: java swing jlist

我遇到了JList类的麻烦。我从向量中获取数据以填充JList,当我在屏幕上显示时,列表看起来很好。该列表包含表名,所选的一个是要显示的表。因此,proyect结构基于List的getSelectedValue()。当我第一次运行程序时,getSelectedValue返回null,所以我尝试使用setSelectedValue(“Alumnos”,true)自己修改它,我得到了这个:     线程“main”java.lang.NullPointerException中的异常     在interfaz.DataBaseManagerJList.setSelectedValue(DataBaseManagerJList.java:53)

这是没有意义的,因为Alumnos在我在屏幕上显示时位于列表中。这是JList类代码:

public class DataBaseManagerJList extends JPanel
{

private static final long serialVersionUID = 1L;

private static JList tablas;

DefaultListModel model;
DatabaseTableManagers dtm = DatabaseTableManagers.getInstance();
private static DataBaseManagerJList instance = null;

public static DataBaseManagerJList getInstance()
{
    if (instance == null)
    {
        instance = new DataBaseManagerJList();
    }
    return instance;
}

public DataBaseManagerJList()
{
    model = new DefaultListModel();
    ArrayList<String> aux = new ArrayList<String>(dtm.getTableNames());
    for(int i =0;i<aux.size();i++)
    {
        model.addElement(aux.get(i));
        System.out.println(aux.get(i));
    }
    JList tablas = new JList(model);    
    //tablas.setSelectedValue("Alumnos",true);
    add(tablas);
}

public String devolver()
{
    return (String) tablas.getSelectedValue(); 
}


public void setSelectedValue(String name)
{

    tablas.setSelectedValue(name, true);
}


}

有什么想法吗?谢谢大家:)

2 个答案:

答案 0 :(得分:3)

我猜你的模型中的String有一个空间或其他一些区别,而不是你想要选择的那个。而不是硬编码值。尝试从模型中选择第一个项目。例如:

 JList tablas = new JList(model);    
 tablas.setSelectedValue(aux.get(0), true);
 add(tablas);

这样可以保证值在模型中。 (假设列表不为空)。

另一个优点是Alumnos不再是硬编码值,因此如果它不再是列表中的选项,则不必更改选择它的代码。

答案 1 :(得分:2)

而不是

JList tablas = new JList(model);

tablas = new JList(model);

您创建本地实例,然后在setter中使用类字段。