【问题标题】:How to tell the JList cellrenderer for sudden JList changes?如何告诉 JList cellrenderer 突然的 JList 更改?
【发布时间】:2012-04-21 09:19:16
【问题描述】:

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

【问题讨论】:

  • 你的意思是你有一个JListA,它可视化与另一个选定JList相同的数据,用户可以更改“选定列表”,此时列表A应该显示新“选定列表”中包含的数据?
  • 是的,它应该显示选定的列表数据
  • 不明白渲染器在哪里/如何发挥作用?假设@Robin 描述了您的要求(一个 jlist 显示了许多 jlist 池中的“选定”列表的数据)。以及如何检测“选定”?
  • @user385261(两者都+1)我认为那里的答案触及了其他问题,请使用SSCCE编辑您的帖子

标签: java swing jlist


【解决方案1】:

从我收集到的问题下方的 cmets 中,您有一个列表 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() );
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多