JLists с Arraylists? - PullRequest
       27

JLists с Arraylists?

1 голос
/ 13 февраля 2012

Я работаю над проектом, который требует GUI, но у меня нет опыта работы с GUI, поэтому все, что я делал, это в каком-то смысле догадка.Я создал массив объектов, который я поместил в JList, и теперь я пытаюсь изменить текст в метке в зависимости от того, что выберет пользователь.Я получаю сообщение об ошибке: «Невозможно сослаться на библиотеку неконечных переменных внутри внутреннего класса, определенного в другом методе»

Используемый мною массив заполнен объектами, которые я могувызов строки из

Как мне заставить это работать?

JList list = new JList(bookNames.toArray());

list.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        typeLabel.setText(library.get(list.getSelectedIndex()).getType());
    }
});

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Вы не можете получить доступ к переменной typeLabel внутри вашего нового ListSelectionListener () {...}.

JList list = new JList(bookNames.toArray());

list.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        // you cannot access typeLabel here
        typeLabel.setText(library.get(list.getSelectedIndex()).getType());
    }
});

Быстрое исправление - объявить typeLabel финальным. Это означает, что вы не можете переназначить другое значение typeLabel, но это, вероятно, нормально.

final typeLabel = whatever; // add the final modifier

final JList list = new JList(bookNames.toArray());

list.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        typeLabel.setText(library.get(list.getSelectedIndex()).getType());
    }
});

редактирование: Кроме того, список должен быть объявлен окончательным.

0 голосов
/ 13 февраля 2012

Ссылка на JList list должна быть final.

final JList list = new JList(...)

Ключевое слово final в Java имеет несколько значений. При использовании с переменной или полем это означает, что он всегда ссылается на один и тот же объект, то есть указатель является константой. Это не означает, что сам объект неизменен (или неизменен).

Неизменяемость объектов достигается другим способом - не давайте нам никаких public методов, которые изменяют содержимое объекта. Например, String s и Date s всегда неизменны независимо от ключевого слова final.

Другой пример final: при использовании перед классом это означает, что класс не может быть разделен на подклассы.

...