仅从JavaFX ObservableList中获取一些值

时间:2013-04-28 10:47:13

标签: java charts javafx-2 javafx

我需要建立一个

LineChart<Number,Number>

我将数据存储在

ObservableList<MyData>

MyData有4个变量,全部都是int。我们只需说MyData中的变量为:No1, No2, No3, No4

接下来,我需要构建

LineChart<Number,Number>

我只需要No1No2变量,但我不知道如何从ObservableList获取该值,现在我只使用XYChart.Data添加新值我的XYChart.Series LineChart<Number,Number>的数据如下:

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
            );
}

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

1 个答案:

答案 0 :(得分:4)

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

如果您知道所需项目的位置,可以使用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);
    }
}