Java女子部に参加してきました

Java女子部部活に参加してきました。
今回は、3人それぞれ以下のように別々の課題に取り組みました。

  • Androidでセンサーを使ってのアニメーション
  • JavaのDIについて
  • JavaFXのChart

私は、JavaFXのChartをちょっと実装してみました。ちょっとしたグラフはとても簡単に作成できました。

以下のLineChartを実装していてはまったのですが、fxmlファイルで「CategoryAxis」を使用していると、controller側で「XYChart.Series」にするとコンパイルは問題ないのですが、実行時にエラーになってしまいます。
解決策はFXMLDocument.fxmlの「CategoryAxis」->「NumberAxis」に修正するだけでした(汗)

  • FXMLDocumentController.java
...
    private void setLineChart() {
        lineChart.setTitle("LineChart");
        XYChart.Series<String, Number> series =new  XYChart.Series<>(); // ★ここを<Number, Number>でエラー発生
        series.getData().addAll(new XYChart.Data<>("1", 10),
                new XYChart.Data<>("2", 20),
                new XYChart.Data<>("3", 30)
                );
        lineChart.getData().add(series);
    }
...
  • FXMLDocument.fxml
...
      <LineChart fx:id="lineChart" GridPane.columnIndex="0" GridPane.rowIndex="1">
        <xAxis>
          <CategoryAxis side="BOTTOM" />
        </xAxis>
        <yAxis>
          <NumberAxis side="LEFT" />
        </yAxis>
      </LineChart>
...

お菓子タイム以外はすごく集中して実装しました(JavaFXのChart以外にもちょっとはまって今でもまだ解決できていませんが、、、)

  • 追記

帰宅して目標の一部(Animationするchart)を実装しました。
本当は、Stream処理でデータを作成して、Streamで集計したデータをChartに動的に表示するようにしたかったのですが、、、
また今後の課題に!
以下の画像で「Start Animating LineChart」ボタンをクリックするとLineChartのY軸の値が1分感覚でランダムに変化します!
JavaFx Animating LineChart

  • FXMLDocumentController.java

追加した部分は以下の数行、とても簡単です!やっぱり動きがあるのをみるのは楽しいです!

...
    @FXML private LineChart animatingLineChart;
    @FXML Button button;
    private Timeline tl = new Timeline();
...
    private void setAnimatingLineChart() {
        animatingLineChart.setTitle("Animating LineChart");
        XYChart.Series<Number, Number> series =new  XYChart.Series<>();
        series.getData().addAll(new XYChart.Data<>(1, 10),
                new XYChart.Data<>(2, 20),
                new XYChart.Data<>(3, 30)
                );
        animatingLineChart.getData().add(series);
        // set button event 
        button.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
            if (button.getText().startsWith("Start")){
                button.setText("Stop Animating LineChart");
                // Start Animating
                tl.getKeyFrames().add(
                    new KeyFrame(Duration.seconds(1), event -> {
                        animatingLineChart.getData().stream().forEach(serties -> {
                            series.getData().stream().forEach(data -> {
                                Random r = new Random();
                                data.setYValue(r.nextInt(30)); //★ここで1秒毎のY軸の値を設定
                            });
                        });
                    })
                );
                tl.setCycleCount(Animation.INDEFINITE);
                tl.play();
            } else {
                button.setText("Start Animating LineChart");
                // Stop Animating
                tl.stop();
            }
        });
    }
...

コードはtomoTaka01/JavaFXChartSample: JavaFX Chart Sampleにアップしています。
Java女子会、とても楽しかったです!
@さん、いつも会場の手配などいろいろお世話していただいてありがとうございます!!!