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);
我有一个我想不通的问题。请让我把代码放在第一位以便更好地解释:
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);