在过去一周左右的时间里,我正在将我的 javafx 项目从 Java 8 迁移到 Java 11、JavaFX 17。我还从 Scenebuilder 8.5 迁移到 Scenebuilder JavaFX 版本:20.0.1。总而言之,一切都相当顺利,但是我面临着一个似乎无法解决的令人困惑的错误。 当我将项目的 Java 版本更改为 Java 11,并将 JavaFX17 库导入到我的项目中时,我在项目中使用的 LineChart 开始抛出一个我以前在 FXML 文档文件中从未见过的错误。这是一个 330 行的文件,所以我只包含相关部分:
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.effect.DropShadow?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Line?>
<LineChart fx:id="chartDashboardLineChart" layoutX="5.0" layoutY="10.0" prefHeight="233.0" prefWidth="870.0" title="Monthly Sales">
<xAxis>
<CategoryAxis side="BOTTOM" fx:id="x" />
</xAxis>
<yAxis>
<NumberAxis fx:id="y" side="LEFT" />
</yAxis>
</LineChart>
错误显示在声明 LineChart 图表 DashboardLineChart 的行下方。还有两个新错误:类“javafx.scene.chart.LineChart”不支持属性“xAxis”(“yAxis”也是如此)。对我来说,这两个错误似乎没有上面的 FXML Loader 错误那么令人担心。 我还将包含我的项目中的相关代码行,尽管我认为错误更有可能出现在 FXML 文档中。这是 Java 代码(分为 2 个不同的类:
还有另一个类,这个类太大了,无法完整发布,称为 DashboardController.java,以下是 DashboardController 类的相关部分:
@FXML
private LineChart<?, ?> chartDashboardLineChart;
@FXML
private CategoryAxis x;
@FXML
private NumberAxis y;
LineCharts LC = new LineCharts();
//later on in the initialize area of the code
//Call the initializeLineChart method and pass the line chart as an argument
LC.generateDashboardLineChart(chartDashboardLineChart);
我已经尝试了很多方法来解决这个问题,但没有成功。这似乎是一个罕见的问题,因为我在网上几乎找不到任何信息。
我感谢任何关于导致我的问题的原因以及如何解决它的帮助或任何理论。谢谢!
我无法复制这个。
环境
OS X 13.4.1、JavaFX 20.0.2、OpenJDK 19.0.2
折线图.fxml
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<LineChart fx:controller="com.test.demo.chart.ChartController"
xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:id="chartDashboardLineChart"
layoutX="5.0" layoutY="10.0"
prefHeight="233.0" prefWidth="870.0"
title="Monthly Sales">
<xAxis>
<CategoryAxis side="BOTTOM" fx:id="x" />
</xAxis>
<yAxis>
<NumberAxis fx:id="y" side="LEFT" />
</yAxis>
</LineChart>
ChartController.java
package com.test.demo.chart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
public class ChartController {
public LineChart<String, Double> chartDashboardLineChart;
public CategoryAxis x;
public NumberAxis y;
}
LineChartApp.java
包com.test.demo.chart;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class LineChartApp extends Application {
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(
LineChartApp.class.getResource(
"line-chart.fxml"
)
);
stage.setScene(
new Scene(
loader.load()
)
);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
输出