【问题标题】:JavaFX Class LineChart zoom operation doesn't workJavaFX 类 LineChart 缩放操作不起作用
【发布时间】:2015-01-27 22:48:03
【问题描述】:

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

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

    };
    }

我用上面的代码来测试是否可以操作LineChart,特别是当我滚动鼠标时,LineChart会放大/缩小。 我发现与上面的代码完全一样,它不起作用。但是如果我们只更改前两行代码,则更改为:

    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

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

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

【问题讨论】:

    标签: javafx


    【解决方案1】:

    如果您查看NumberAxis JavaDoc,则可以清楚地看到使用空构造函数或带参数之间的区别:

    公共 NumberAxis() 创建一个自动范围的 NumberAxis

    public NumberAxis(double lowerBound, double upperBound, double tickUnit) 使用给定的上限、下限和刻度单位创建一个非自动范围的 NumberAxis

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

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

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

    xAxis.setAutoRanging(false);
    

    【讨论】:

    • 非常感谢!何塞·佩雷达。之前我以为我把Property autoRanging弄错了,我想我应该把它设置为ture,这样如果我改变了lowerBound或upperBound,对应的lineChart就会改变。这就是我不能如愿操作的原因。非常感谢!
    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 2018-08-27
    • 2018-03-05
    • 2021-10-15
    • 2015-05-26
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多