У меня есть JList, который будет указывать на выбранный JList в зависимости от пользователя. Он действует как монитор, который будет отслеживать выбранный JList. Когда я реализую настраиваемое средство визуализации ячеек и программно делаю что-то вроде this.list = getSelectedList()
, средство визуализации ячеек не реагирует на это внезапное изменение информации. Как мне уведомить JList о необходимости повторной оценки данных списка без необходимости вызывать функцию добавления / удаления?
Как сообщить Cellrenderer JList о внезапных изменениях 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, который должен отображать содержимое другого списка. Список 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() );
}
JList
A
, который визуализирует те же данные, что и другой выбранныйJList
, и пользователь может изменить «выбранный список», в какой момент списокA
должен отображать данные, содержащиеся в новом «выбранном списке»? - person Robin   schedule 21.04.2012