簡體   English   中英

JavaFX BarChart不更新

[英]JavaFX BarChart doesn't update

我的窗口中有以下控制器:

package window;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;

import java.util.Map;
import java.util.SortedMap;

public class StatisticsController {

    @FXML
    private BarChart<String, Number> barChartHistogram;

    private SortedMap<String, Integer> _points;

    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();

    public void onLoad(SortedMap<String, Integer> points) {
        barChartHistogram = new BarChart<String, Number>(xAxis,yAxis);
        barChartHistogram.setCategoryGap(0);
        barChartHistogram.setBarGap(0);
        xAxis.setLabel("Numer indeksu");
        yAxis.setLabel("Ilość punktów");
        XYChart.Series series = new XYChart.Series();
        series.setName("Histogram");
        for (Map.Entry<String, Integer> p: points.entrySet()) {
            series.getData().add(new XYChart.Data(p.getKey(), p.getValue()));
        }
        barChartHistogram.getData().addAll(series);
        _points = points;
    }

    @FXML
    private void buttonShowPressed(ActionEvent event) {
        xAxis.setLabel("Numer indeksu");
        yAxis.setLabel("Ilość punktów");
        barChartHistogram = new BarChart<String, Number>(xAxis,yAxis);
        barChartHistogram.setCategoryGap(0);
        barChartHistogram.setBarGap(0);
        barChartHistogram.setTitle("XDDDDDDDDDDDDDDD");
        barChartHistogram.setMaxHeight(1000);
        XYChart.Series series = new XYChart.Series();
        series.setName("Histogram");
        for (Map.Entry<String, Integer> p: _points.entrySet()) {
            series.getData().add(new XYChart.Data(p.getKey(), p.getValue()));
        }
        barChartHistogram.getData().addAll(series);
    }
}

此窗口的.fxml文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.chart.BarChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="window.StatisticsController">
   <children>
      <BarChart fx:id="barChartHistogram" layoutX="40.0" layoutY="14.0" prefHeight="372.0" prefWidth="500.0">
        <xAxis>
          <CategoryAxis side="BOTTOM" />
        </xAxis>
        <yAxis>
          <NumberAxis side="LEFT" />
        </yAxis>
      </BarChart>
      <Button fx:id="buttonShow" layoutY="337.0" mnemonicParsing="false" onAction="#buttonShowPressed" text="Button" />
   </children>
</AnchorPane>

現在的問題是,當我按下按鈕時,什么都沒有改變(這里的onLoad()方法用於測試onLoad C#的行為)。 條形圖保持不變,沒有數據,標簽或標題(我在調試器中檢查了數據, barCharHistogram對象的data屬性下有我的數據)。 我做錯了什么嗎? 如何使其像重畫條形圖一樣?

您已經在FXML中定義了所需的一切。 您不應該在控制器中創建新圖表或新軸。

fx:id s添加到軸:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.chart.BarChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="window.StatisticsController">
   <children>
      <BarChart fx:id="barChartHistogram" layoutX="40.0" layoutY="14.0" prefHeight="372.0" prefWidth="500.0">
        <xAxis>
          <CategoryAxis fx:id="xAxis" side="BOTTOM" />
        </xAxis>
        <yAxis>
          <NumberAxis fx:d="yAxis" side="LEFT" />
        </yAxis>
      </BarChart>
      <Button fx:id="buttonShow" layoutY="337.0" mnemonicParsing="false" onAction="#buttonShowPressed" text="Button" />
   </children>
</AnchorPane>

然后你可以做

public class StatisticsController {

    @FXML
    private BarChart<String, Number> barChartHistogram;

    private SortedMap<String, Integer> _points;

    @FXML
    private CategoryAxis xAxis ;
    @FXML
    private NumberAxis yAxis ;


    @FXML
    private void buttonShowPressed(ActionEvent event) {
        xAxis.setLabel("Numer indeksu");
        yAxis.setLabel("Ilość punktów");
        barChartHistogram.setCategoryGap(0);
        barChartHistogram.setBarGap(0);
        barChartHistogram.setTitle("XDDDDDDDDDDDDDDD");
        barChartHistogram.setMaxHeight(1000);
        XYChart.Series series = new XYChart.Series();
        series.setName("Histogram");
        for (Map.Entry<String, Integer> p: _points.entrySet()) {
            series.getData().add(new XYChart.Data(p.getKey(), p.getValue()));
        }
        barChartHistogram.getData().addAll(series);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM