Ошибка с методом setSelectedValue для JLIST - PullRequest
0 голосов
/ 12 июля 2011

У меня проблемы с классом JList. Я получаю данные из вектора для заполнения JList, и список выглядит нормально, когда я показываю их на экране. Список содержит имена таблиц, а выбранная является таблицей для отображения. Таким образом, структура проекта основана на getSelectedValue () списка. Когда я в первый раз запустил программу, getSelectedValue вернул значение null, поэтому я попытался изменить его самостоятельно с помощью setSelectedValue («Alumnos», true), и я получил следующее: Исключение в потоке "main" java.lang.NullPointerException at 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 ]

3 голосов
/ 12 июля 2011

Я предполагаю, что строка в вашей модели имеет пробел или какое-то другое отличие от той, которую вы пытаетесь выбрать.Вместо жесткого кодирования значения.Попробуйте просто выбрать первый элемент из модели.Например:

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

Таким образом, вы гарантируете, что значение находится в модели.(Предполагая, что список не пустой).

Еще одно преимущество - Alumnos больше не является жестко заданным значением, поэтому, если он больше не является опцией в вашем списке, вам не нужно менять код, который его выбирает.

2 голосов
/ 12 июля 2011

Вместо

JList tablas = new JList(model);

запись

tablas = new JList(model);

Вы создаете локальный экземпляр, но затем используете поле класса в установщике.

...