【问题标题】:Exception while extending JavaFX LineChart扩展 JavaFX LineChart 时出现异常
【发布时间】:2020-05-27 23:21:23
【问题描述】:

我想扩展 JavaFX LineChart 以添加一些功能(授予对图例的访问权限以便对其进行自定义、添加可见边界等)。我创建了一个 EnhancedLineChart 类并在我的 FXML 文件中声明了一个实例,但它返回了一个异常:

原因:com.sun.javafx.fxml.PropertyNotFoundException:属性“xAxis”不存在或为只读。

这是我的课程

package com.ratp.oam.widgets.graph;

import com.sun.javafx.charts.Legend;

import javafx.collections.ObservableList;
import javafx.scene.chart.Axis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;

public class EnhancedLineChart extends LineChart<Number, Number> {
    public EnhancedLineChart() {
        super(new NumberAxis(), new NumberAxis());
    }

    public EnhancedLineChart(final NumberAxis xAxis, final NumberAxis yAxis) {
        super(xAxis, yAxis);
    }

    public EnhancedLineChart(final NumberAxis xAxis, final NumberAxis yAxis,
            ObservableList<Series<Number, Number>> data) {
        super(xAxis, yAxis, data);
    }

    @Override
    public Axis<Number> getXAxis() {
        return super.getXAxis();
    }

    @Override
    public Axis<Number> getYAxis() {
        return super.getYAxis();
    }

    /**
     * Fournit la légende du graphique telle qu'elle a été implémentée dans la
     * classe {@link LineChart}.
     * 
     * @return
     */
    public Legend legend() {
        return (Legend) super.getLegend();
    }
}

以及实例化我的组件的 FXML 文件 (DataGraph.fxml):

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

<?import com.ratp.oam.widgets.graph.EnhancedLineChart?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<fx:root type="javafx.scene.layout.HBox" xmlns:fx="http://javafx.com/fxml/1" spacing="3">
    <ScrollPane fitToWidth="true" HBox.hgrow="ALWAYS" styleClass="scroll-pane">
        <fx:define>
            <EnhancedLineChart fx:id="analogicalChart" createSymbols="false" animated="false" prefHeight="350">
                <padding>
                    <Insets topRightBottomLeft="0" />
                </padding>

                <xAxis>
                    <NumberAxis fx:id="analogicalXAxis" animated="false" side="BOTTOM" forceZeroInRange="false" autoRanging="false" />
                </xAxis>

                <yAxis>
                    <NumberAxis animated="false" side="LEFT" forceZeroInRange="false" autoRanging="false" />
                </yAxis>
            </EnhancedLineChart>
        </fx:define>

        <VBox fx:id="graphBox">
            <VBox fx:id="logicalPane" />
        </VBox>
    </ScrollPane>
</fx:root>

我该如何解决我的问题?

Nota Bene

  • 我已经检查了我的 FXML 文件中的包导入。
  • 当我删除 2 个被覆盖的方法时,我得到了相同的结果。

【问题讨论】:

  • minimal reproducible example 请...您真正使用的是哪个fx版本? fx2 远非当前 ;)
  • 请问缺少什么? (JavaFX 2.2)
  • 我可以将一些东西放入我的 IDE,编译并运行 .. 而无需做任何其他事情
  • 如果我显示完整的堆栈跟踪对你更好?
  • 哦,简直不敢相信,sry .. 那真的很老了 - 你为什么要坚持这样一个过时的版本?可能很难找到愿意甚至能够复制的人..

标签: java javafx properties javafx-2 linechart


【解决方案1】:

最后我通过查看LineChart 类找到了解决方案。如果我想在我的 FXML 文件中使用 xAxisyAxisdata,我需要在构造函数参数之前放置 @NamedArg 注释,以便 FXML 加载程序可以调用实例。结果如下所示:

package com.ratp.oam.widgets.graph;

import com.sun.javafx.charts.Legend;

import javafx.beans.NamedArg;
import javafx.collections.ObservableList;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;

public class EnhancedLineChart extends LineChart<Number, Number> {
    public EnhancedLineChart(@NamedArg("xAxis") NumberAxis xAxis, @NamedArg("yAxis") NumberAxis yAxis) {
        super(xAxis, yAxis);
    }

    public EnhancedLineChart(@NamedArg("xAxis") NumberAxis xAxis, @NamedArg("yAxis") NumberAxis yAxis, @NamedArg("data") ObservableList<Series<Number, Number>> data) {
        super(xAxis, yAxis, data);
    }

    /**
     * Fournit la légende du graphique telle qu'elle a été implémentée dans la
     * classe {@link LineChart}.
     */
    public Legend legend() {
        return (Legend) super.getLegend();
    }
}

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2014-10-23
    • 2014-05-22
    • 2014-03-25
    相关资源
    最近更新 更多