Как сообщить сотовому представителю JList о внезапных изменениях JList?

У меня есть JList, который будет указывать на выбранный JList в зависимости от пользователя. Он действует как монитор, который будет контролировать выбранный JList. Когда я реализую пользовательский рендерер ячеек и программно делаю что-то вроде this.list = getSelectedList()средство визуализации ячеек не реагирует на это внезапное изменение информации. Как мне уведомить JList о переоценке данных списка без необходимости вызывать функцию добавления / удаления?

2 ответа

Решение

this.list = getSelectedList() влияет на другой объект JList на this.list поле. Если вы установите пользовательский рендер в this.list перед выполнением этой строки вы устанавливаете рендерер на другой объект JList, и рендерер никак не может волшебным образом присоединиться к новому выбранному списку.

Вы путаете переменные и объекты. Когда вы вызываете метод объекта, вы изменяете объект, на который указывает переменная, а не сама переменная. Если вы хотите присоединить тот же модуль визуализации ячеек к недавно выбранному JList, вам понадобится следующий код:

ListCellRenderer renderer = this.list.getCellRenderer();
this.list = getSelectedList();
this.list.setCellRenderer(renderer);

Из комментариев под вопросом, который я собрал, у вас есть один список А, который должен показывать содержимое другого списка. Список A должен отображать содержимое списка, выбранного пользователем, и у вас возникает проблема, когда пользователь изменяет "выбранный список".

Вы можете поделиться ListModel за JList экземпляров. Таким образом, вы могли бы иметь что-то вроде

public void selectionChanged( JList selectedList ){
  //update the model of this.list to match the model of selectedList
  this.list.setModel( selectedList.getModel() );
}
Другие вопросы по тегам