gpt4 book ai didi

JavaFX BarChart 不更新

转载 作者:行者123 更新时间:2023-12-02 11:35:11 25 4
gpt4 key购买 nike

我的窗口有以下 Controller :

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 中定义了所需的一切。您不应该在 Controller 中创建新图表或新轴。

fx:id 添加到坐标区:

<?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 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com