我试图创建一个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中完成。
我的问题是,如果你在网上有这样的例子 首先看一个事物列表,然后做出选择,只看到 此选择的更新或可能有人提出建议如何 用例在JavaFX中处理,因为它感觉是一个标准的情况。
答案 0 :(得分:1)
正如我在评论中所说,您可以观察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中的Items只是对象。您可以将其更改为您正在使用的任何类型。