JavaFX类LineChart缩放操作不起作用

时间:2015-01-27 14:05:14

标签: javafx

我有一个我无法弄清楚的问题。请让我先把代码放在首位,以便更好地解释:

    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 xAxis / yAxis中分离新的NumberAxis(...)实例,它也不起作用。

1 个答案:

答案 0 :(得分:0)

如果你看一下NumberAxis JavaDoc:

,使用空构造函数或参数之间的区别很明显
  

public NumberAxis()   创建自动范围的NumberAxis

  

public NumberAxis(double lowerBound,double upperBound,double tickUnit)   使用给定的上限,下限和刻度单位

创建非自动范围的NumberAxis

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

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

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

xAxis.setAutoRanging(false);