JavaFX BarChart不会更新 [英] JavaFX BarChart doesn't update

查看:153
本文介绍了JavaFX BarChart不会更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的窗口有以下控制器:

I have the following Controller for my window:

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 对象的数据在数据 property)。我做了一些愚蠢的错事吗?我怎样才能重新绘制条形图?

Now the problem is when I press the button, nothing changes (onLoad() method is here for testing the onLoad C#-like behaviour). The bar chart stays the same without data, labels or title (I checked the data in the debugger, the barCharHistogram object has my data under its data property). Am I doing something stupidly wrong? How can I make it like redraw the barchart?

推荐答案

您已经在FXML中定义了所需的一切。您不应该在控制器中创建新图表或新轴。

You already define everything you need in the FXML. You should not be creating a new chart, or new axes, in the controller.

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

这篇关于JavaFX BarChart不会更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆