如何告诉JList cellrenderer突然更改JList?

时间:2012-04-21 09:19:17

标签: java swing jlist

我有一个JList,它将根据用户指向选定的JList。它就像一个监视器,它将监视所选的JList。当我实现自定义单元格渲染器并以编程方式执行this.list = getSelectedList()之类的操作时,单元格渲染器不会对此突然的信息更改做出反应。如何通知JList重新评估其列表数据而无需调用添加/删除功能?

2 个答案:

答案 0 :(得分:3)

根据我收集的问题下面的评论,你有一个列表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() );
}

答案 1 :(得分:2)

this.list = getSelectedList()会影响this.list字段的另一个JList对象。如果在执行此行之前将自定义渲染器设置为this.list,则可以在另一个JList对象上设置渲染器,并且渲染器无法神奇地附加到新选定列表。

你混淆了变量和对象。当您在对象上调用方法时,您正在修改变量指向的对象,而不是变量本身。如果要将相同的单元格渲染器附加到新选择的JList,则需要以下代码:

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