JavaFX Class 折线图缩放操作不起作用

JavaFX Class LineChart zoom operation doesn't work

我有一个我想不通的问题。请让我把代码放在第一位以便更好地解释:

    public class TestXYChart extends Application {
        NumberAxis xAxis = new NumberAxis();     //     1
        NumberAxis yAxis = new NumberAxis();     //     2
        XYChart.Series series1 = new XYChart.Series();
        @Override
        public void start(Stage primaryStage) {

        StackPane root = new StackPane();
        Scene scene = new Scene(root, 300, 250);

        LineChart lineChart = new LineChart<Number, Number>(xAxis, yAxis);
        root.setOnScroll(scrollHandler);
        root.getChildren().addAll(lineChart);

        series1.getData().add(new XYChart.Data(1, 20));
        series1.getData().add(new XYChart.Data(2, 40));
        series1.getData().add(new XYChart.Data(3, 100));
        series1.getData().add(new XYChart.Data(4, 50));
        series1.getData().add(new XYChart.Data(5, 170));
        series1.getData().add(new XYChart.Data(6, 190));
        series1.getData().add(new XYChart.Data(7, 30));
        series1.getData().add(new XYChart.Data(8, 39));
        series1.getData().add(new XYChart.Data(9, 44));
        series1.getData().add(new XYChart.Data(10, 78));
        series1.getData().add(new XYChart.Data(11, 93));
        series1.getData().add(new XYChart.Data(12, 75));

//        this.loadIntoDataBaseFromFile();
        lineChart.getData().addAll(series1);
        lineChart.setAnimated(true);
        lineChart.setAlternativeColumnFillVisible(false);
        lineChart.setAlternativeRowFillVisible(false);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    EventHandler scrollHandler = new EventHandler<ScrollEvent>(){

        @Override
        public void handle(ScrollEvent event) {
           System.out.println("Handling Scroll Event");
           xAxis.setLowerBound(xAxis.getLowerBound() + 1);
           xAxis.setUpperBound(xAxis.getUpperBound() - 1);
        }

    };
    }

我用上面的代码测试是否可以操作折线图,尤其是当我滚动鼠标时,折线图会缩放in/out。 我发现事实与上面的代码完全一样,它不起作用。但是如果我们只是改变前两行代码,从:

    NumberAxis xAxis = new NumberAxis();     //     1
    NumberAxis yAxis = new NumberAxis();     //     2

至:

    NumberAxis xAxis = new NumberAxis(0,12,0.5);     //     1
    NumberAxis yAxis = new NumberAxis(0,300,10);     //     2

一切正常。那么,为什么会这样呢?谢谢。

而且,如果我将 new NumberAxis(...) 实例与声明 NumberAxis xAxis/yAxis 分开,它也不起作用。

如果您查看 NumberAxis JavaDoc:

,那么使用空构造函数或使用参数的区别就很明显了

public NumberAxis() Create a auto-ranging NumberAxis

public NumberAxis(double lowerBound, double upperBound, double tickUnit) Create a non-auto-ranging NumberAxis with the given upper bound, lower bound and tick unit

基本上,第一个 autoRanging 设置为 true,这意味着无论您如何修改轴的边界,它都会尝试显示数据。

相反,第二个 autoRanging 设置为 false,因此轴边界的任何变化都会反映在图表上。

请注意,您可以在第一种情况下进行设置以更改默认行为:

xAxis.setAutoRanging(false);