【问题标题】:Take only some value from JavaFX ObservableList仅从 JavaFX ObservableList 中获取一些值
【发布时间】:2013-04-22 03:22:19
【问题描述】:

我需要建立一个

LineChart<Number,Number>

我将数据存储在

ObservableList<MyData>

MyData 有 4 个变量,都是int。假设MyData 中的变量是:No1, No2, No3, No4

接下来,我需要构建

LineChart<Number,Number>

我只需要No1No2 变量,但我不知道如何从ObservableList 中获取该值,现在我只使用XYChart.Data 将新数据添加到我@ 的XYChart.Series 987654334@这样的:

private static XYChart.Series dataLineChart = new XYChart.Series();
public static void updateDataChart(){
    dataLineChart.getData().addAll(
                new XYChart.Data(3,15),
                new XYChart.Data(7,20)
            );
}

如果我可以从ObservableList 中获取值,我可以简单地使用:

private static XYChart.Series dataLineChart = new XYChart.Series();
public static void updateDataChart(){
    dataLineChart.getData().addAll(
                myObservableList
            );
}

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 在我看来,没有比将可观察数组列表中的数据转换为数组列表,用作图表数据参数更好的解决方案...
  • @AlexanderKirov : 是的,但这太浪费了,我已经有了数据但仍需要将其转换为另一种类型的列表才能使用它们:(
  • 我创建了一个 RFE:javafx-jira.kenai.com/browse/RT-30059,您可以跟踪它的进度和讨论。

标签: java charts javafx-2 javafx


【解决方案1】:

无论如何,您都需要创建一个新列表。没问题,速度很快,而且只会使用一点新内存(仅用于处理程序,不适用于对象):

如果您知道所需物品的位置,您可以使用List#subList() 方法。

private static XYChart.Series dataLineChart = new XYChart.Series();
public static void updateDataChart(){
    dataLineChart.getData().addAll(
            myObservableList.subList(0,2);
    );
}

如果项目不连续,您可以在一行中创建新列表:

ObservableList<String> sublist = FXCollections.observableArrayList( 
                     myObservableList.get(3), myObservableList.get(5) );

如果您使用您的条件直接在更新方法中将旧列表过滤为新列表,您也可以保存在新列表中:

public static void updateDataChart(){
    for (MyData data : myObservableList) {
        if ( data.isLucky() ) // or whatever is your condition
            dataLineChart.getData().add(data);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多