2012-04-21 52 views
0

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

+0

你的意思是你有一个''JList' A'其可视化的相同数据的另一选择'JList',用户可以改变在该点列表中的“选择清单” 'A'应该显示新的'选择列表'中包含的数据? – Robin 2012-04-21 09:26:10

+0

是的,它假设显示选定的列表数据 – user385261 2012-04-21 09:27:10

+0

不明白渲染器在何处/如何进入?假设@Robin描述了您的需求(一个jlist显示了多个jlists池中“selected”列表的数据)。你如何检测“选择”? – kleopatra 2012-04-21 09:42:50

回答

2

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

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

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

从我收集到的问题,下面的评论你有一个列表A中应显示另一个列表的内容。 A列表应该显示用户选择的列表的内容,并且当用户更改“选定列表”时出现问题。

您可以在JList实例后面共享ListModel。所以,你可以有类似

public void selectionChanged(JList selectedList){ 
    //update the model of this.list to match the model of selectedList 
    this.list.setModel(selectedList.getModel()); 
}