我有一个我无法弄清楚的问题。请让我先把代码放在首位,以便更好地解释:
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(...)实例,它也不起作用。
答案 0 :(得分:0)
如果你看一下NumberAxis
JavaDoc:
public NumberAxis() 创建自动范围的NumberAxis
和
public NumberAxis(double lowerBound,double upperBound,double tickUnit) 使用给定的上限,下限和刻度单位
创建非自动范围的NumberAxis
基本上,第一个将autoRanging
设置为true,无论你如何修改轴的边界,它都会尝试显示数据。
相反,第二个将autoRanging
设置为false,因此轴边界的任何变化都将反映在图表上。
请注意,您可以在第一种情况下设置此项以更改默认行为:
xAxis.setAutoRanging(false);