Имам JList, който ще сочи към избран JList в зависимост от потребителя. Той действа като монитор, който ще следи избрания JList. Когато имплементирам персонализирано изобразяване на клетки и правя програмно нещо като this.list = getSelectedList()
, изобразяването на клетки не реагира на тази внезапна промяна на информацията. Как да уведомя JList да преоцени данните от своя списък, без да се налага да извиквам функцията за добавяне/премахване?
Как да кажете на JList cellrenderer за внезапни промени в 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() );
}
JList
A
, който визуализира същите данни като друг избранJList
и потребителят може да промени „избрания списък“, в който момент списъкA
трябва да показва данните, съдържащи се в новия „избран списък“? - person Robin   schedule 21.04.2012