【问题标题】:Loop through observable list遍历可观察列表
【发布时间】:2014-06-12 19:38:33
【问题描述】:

我有一个包含单列的 javafx 表 (carTable):

+-------------+
+ Brand        +
+-------------+

此列是可观察列表 (carOL) 的一部分。此 OL 还包含 2 个列表(“日期”和“价格”)。可以从互联网上下载每个品牌的特定时间窗口的价格。

例如:

Audi
   2014-01-01
   2014-01-02
   55000
   90000
BMW
   2014-01-01
   2014-01-02
   85000
   70000

我现在想用所有这些数据创建一个折线图,比较不同品牌之间的价格变化。

到目前为止我想出了什么:

@FXML private CategoryAxis xAxis = new CategoryAxis();
@FXML private NumberAxis yAxis = new NumberAxis();
@FXML private LineChart<String, Number> lc = new LineChart<>(xAxis,yAxis);

Series<String, Number> series = new Series<>();
List<String> d = new ArrayList<String>();
List<Double> p = new ArrayList<Double>();
int id = 0;

for (Car c : carOL) {
    d = c.getDate(); // returns array list with dates from OL
    p = c.getPrice(); // returns array list with prices from OL
    series.getData().add(new XYChart.Data<>(d.get(id), p.get(id)));
    id++;
    }

lc.getData().add(series);

这当然不能完全返回我想要的。我不知何故需要能够为每个品牌创建单独的“系列”。

谁能帮忙?

【问题讨论】:

    标签: java javafx observablelist


    【解决方案1】:

    如果日期数组中的项目顺序对应于价格数组中的项目顺序,则需要:

    for (Car c : carOL) { 
      d = c.getDate(); // returns array list with dates from OL 
      p = c.getPrice(); // returns array list with prices from OL 
      for (String dates : d.getDate()) { 
        series.getData().add(new XYChart.Data<>(dates, p.get(id))); 
        id++; 
      } 
    } 
    

    浏览所有日期并添加适当的价格。

    【讨论】:

    • 谢谢,但效果很好,因为日期已经在我的观察列表中格式化为字符串
    • @double_o 好的,在初始化seriesnew Series&lt;String, Number&gt;();时尝试添加泛型类型
    • @double_o 你确定carOL 不为空吗?
    • 是的,我确定 carOL 不是空的。我实际上没有添加值的问题。我的问题是我只得到一个系列,即。折线图中的一条线,而不是每个品牌的一条线。
    • @double_o Car c 包含如下信息:Audi 2014-01-01 2014-01-02 55000 90000 ?
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 2020-03-15
    • 2019-06-02
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多