gpt4 book ai didi

java - 在 JavaFX 中实时观察复杂的数据结构

转载 作者:行者123 更新时间:2023-12-02 12:51:48 25 4
gpt4 key购买 nike

我正在尝试创建一个 GUI 层来监视底层应用程序的状态。 Im 监控的数据是一种交易应用程序,具有代表不同市场的以下数据结构以及为了可读性而简化的 JSON 版本。

{
markets: [{id: 1, runners:[{id:a, prices: [{price:10, level: 1}...]}...]},
{id: 2, runners:[{id:a, prices: [{price:10, level: 1}...]}...]},
{id: 3, runners:[{id:a, prices: [{price:10, level: 1}...]}...]}]
}

让我感到困难的原因如下:我将 markets 表示为 ObservableMap 并显示在 ListView 中,列出不同市场的所有 id。每当markets更新ListView时。然而,棘手的部分是在 ListView 中选择一些市场 ID,我想显示所选市场的所有运行者和等级价格,并更新在后台更新时看到的价格。我不明白的是 JavaFX 中这是如何完成的。

My question is if there are any examples online like this where you first see a list of things and then make a selection and only see the updates for this selection or could someone make suggestions how this use case is handled in JavaFX since it feels to be a standard case.

最佳答案

正如我在评论中所说,您可以观察 ListView 的选择。一个简短的例子,告诉你如何做到这一点:

public class Test
{
public Test()
{
ListView<Object> myListView = new ListView<>();
myListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
myListView.getSelectionModel().getSelectedItems().addListener(this::onSelectionChange);
}

private void onSelectionChange(ListChangeListener.Change<? extends Object> change)
{
// Use the complete List to Update everything you need:
List<? extends Object> selection = change.getList(); // List of all selected Items

// OR use the Change to only update the Things that have been changed:
while (change.next())
{
if (change.wasPermutated())
{
for (int i = change.getFrom(); i < change.getTo(); i++)
{
//permutate
}
}
else if (change.wasUpdated())
{
//update item
}
else
{
for (Object removedItem : change.getRemoved())
{
// perform remove action
}

for (Object addedItem : change.getAddedSubList())
{
// perform add action
}
}
}
}
}

在我的示例中,ListView 中的项目只是对象。您可以将其更改为您正在使用的任何类型。

关于java - 在 JavaFX 中实时观察复杂的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44572972/

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