【问题标题】:How to add a listener to a ListView [closed]如何将侦听器添加到 ListView [关闭]
【发布时间】:2021-08-10 06:11:28
【问题描述】:

我希望每次修改我的 ListView 的内容时执行一个小脚本,但是没有办法直接向 listView 添加监听器。我觉得应该有一个不那么复杂的解决方案。

编辑:我正在使用 javaFX,并且我有一个包含一些对象的 ListView,问题是我希望在这些对象的适当性发生变化时改变前面的颜色。问题是 ListView 是在静态方法中创建的,其内容通过以下方式直接链接到另一个类的另一个实例的属性:

ListView<Ticket> tiickets = new ListView<>(otherClass.getTicketsInHand());

我尝试通过以下方式为每个元素添加一个监听器

tickets.getItems().forEach(ticket -> {otherClass.isFullyDone(ticket).addListener(...)});

然而,在调试器的帮助下,我意识到我的程序甚至从未进入 forEach 中描述的主体。当调用此方法时,ListView 票证的内容为空,这就是为什么永远不会在稍后添加的元素上调用侦听器的原因。我正在寻找一种方法来让你的程序在添加元素时保持更新,在这种情况下执行 forEach 循环。

【问题讨论】:

  • 向我们展示您迄今为止的尝试。
  • 添加您的 GUI 框架(Swing、JavaFX、SWT、Vaadin 等)的提及或标记
  • 你检查过this answer吗?

标签: java listview listener add


【解决方案1】:

JavaFX ListView 基于ObservableList,在您的情况下,您使用otherClass.getTicketsInHand() 获取列表,因此您只需向该列表添加一个侦听器即可运行您的代码。例如:

otherClass.getTicketsInHand().addListener(new ListChangeListener<Integer>() {
    @Override
    public void onChanged(javafx.collections.ListChangeListener.Change<? extends Ticket> c) {
        if(c.next())
            otherClass.getTicketsInHand().get(c.getFrom()).addListener(...);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2016-08-21
    • 1970-01-01
    • 2022-08-03
    • 2013-02-17
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多