gpt4 book ai didi

java - 可观察列表更改后,JavaFX 8 ListView 仍显示旧列表的一部分

转载 作者:行者123 更新时间:2023-11-29 04:38:33 25 4
gpt4 key购买 nike

  1. 我用列表 (a) 加载 ListView 。
  2. 为了响应切换更改,我将 ListView 内容切换到另一个列表 (b)。如果列表 (a) 比列表 (b) 长,那么多余的项目将继续显示在 ListView 中,即使它不再可选择。

例如,buyList = {'100532','100533'} 和 saleList = {'100000'}。如果我开始选择 radioBuy,列表将显示“100532”和“100533”。将开关从 radioBuy 切换到 radioSale 将导致列表显示“100000”和“100533”。 “100533”不可选择,但它仍然可见。

可观察列表本身已被证明是正确的大小并且包含正确的项目。只是 ListView 显示显示了一些旧数据。

我尝试过的事情:
1. ticketListView.getItems().clear() 然后在列表切换之前重建一个新的列表。
2. 使用 ticketListView.getItems().removeAll(0, ticketListView.getItems().size())3. 使用循环单独删除每个项目。4. 将 ticketListView.refresh() 与以上所有结合使用。

我的切换 ChangeListener:

    typeGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
public void changed(ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) {
if (typeGroup.getSelectedToggle().equals(radioBuy))
ticketListView.setItems(buyList);
if (typeGroup.getSelectedToggle().equals(radioTransfer))
ticketListView.setItems(transList);
if (typeGroup.getSelectedToggle().equals(radioSale))
ticketListView.setItems(saleList);
}
});

如何让我的 ListView 在切换内容之前自动清空?

最佳答案

抱歉浪费了大家的时间。事实证明我确实在使用自定义单元工厂:

ticketListView.setCellFactory(new Callback<ListView<Header>,
ListCell<Header>>() {
public ListCell<Header> call(ListView<Header> headerListView) {
return new ListCell<Header>() {
@Override
protected void updateItem(Header item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.getTicket());
}
}
};
}
}
);

删除此代码并按照我之前提到的方式执行,覆盖 toString,解决了问题。显然我需要多研究一下细胞工厂......

关于java - 可观察列表更改后,JavaFX 8 ListView 仍显示旧列表的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40230840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com