Как да кажете на JList cellrenderer за внезапни промени в JList?

Имам JList, който ще сочи към избран JList в зависимост от потребителя. Той действа като монитор, който ще следи избрания JList. Когато имплементирам персонализирано изобразяване на клетки и правя програмно нещо като this.list = getSelectedList(), изобразяването на клетки не реагира на тази внезапна промяна на информацията. Как да уведомя JList да преоцени данните от своя списък, без да се налага да извиквам функцията за добавяне/премахване?


person user385261    schedule 21.04.2012    source източник
comment
Искате да кажете, че имате JList A, който визуализира същите данни като друг избран JList и потребителят може да промени „избрания списък“, в който момент списък A трябва да показва данните, съдържащи се в новия „избран списък“?   -  person Robin    schedule 21.04.2012
comment
Да, предполага се, че показва избраните данни от списъка   -  person user385261    schedule 21.04.2012
comment
не разбирате къде/как рендерът влиза в действие? Ако приемем, че @Robin е описал вашето изискване (един jlist, който показва данните от избран списък от набор от много jlists). И как засичате избраното?   -  person kleopatra    schedule 21.04.2012
comment
@user385261 (+1 и за двамата) Мисля, че отговорите там засегнаха останалите проблеми, редактирайте публикацията си с SSCCE   -  person mKorbel    schedule 21.04.2012


Отговори (2)


this.list = getSelectedList() засяга друг JList обект в полето this.list. Ако зададете персонализирано изобразяване на this.list преди да изпълните този ред, вие задавате изобразяването на друг JList обект и няма начин изобразяването да стане магически прикрепено към новия избран списък.

Бъркате променливи и обекти. Когато извиквате метод на обекта, вие модифицирате обекта, към който сочи променливата, а не самата променлива. Ако искате да прикачите същия рендър на клетки към новоизбрания JList, имате нужда от следния код:

ListCellRenderer renderer = this.list.getCellRenderer();
this.list = getSelectedList();
this.list.setCellRenderer(renderer);
person JB Nizet    schedule 21.04.2012

От коментарите под въпроса, които събрах, имате един списък А, който трябва да показва съдържанието на друг списък. Списъкът 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() );
}
person Robin    schedule 21.04.2012