如何将单个轴绘制到窗格?
如果我天真地尝试addAll(axis)
我正在浏览XYChart源代码,了解它如何绘制轴。
编辑:
来源
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.NumberAxis;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class TestSingleAxis extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
StackPane root = new StackPane();
root.getChildren().addAll(new NumberAxis(1, 20, 1));
Scene scene = new Scene(root, 1300, 800, Color.WHITESMOKE);
stage.setScene(scene);
stage.show();
}
}
结果
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:548)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:48)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:134)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
at javafx.scene.chart.Axis.layoutChildren(Axis.java:744)
at javafx.scene.chart.ValueAxis.layoutChildren(ValueAxis.java:359)
at javafx.scene.Parent.layout(Parent.java:1014)
at javafx.scene.Parent.layout(Parent.java:1022)
at javafx.scene.Scene.layoutDirtyRoots(Scene.java:537)
at javafx.scene.Scene.doLayoutPass(Scene.java:508)
at javafx.scene.Scene.preferredSize(Scene.java:1467)
at javafx.scene.Scene.impl_preferredSize(Scene.java:1494)
at javafx.stage.Window$10.invalidated(Window.java:720)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:106)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:140)
at javafx.stage.Window.setShowing(Window.java:783)
at javafx.stage.Window.show(Window.java:798)
at javafx.stage.Stage.show(Stage.java:242)
at guifx.TestSingleAxis.start(TestSingleAxis.java:32)
at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:491)
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:260)
at com.sun.javafx.application.PlatformImpl$5$1.run(PlatformImpl.java:223)
at com.sun.javafx.application.PlatformImpl$5$1.run(PlatformImpl.java:220)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:220)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
Process finished with exit code 1
答案 0 :(得分:1)
观察某些版本的代码,靠近744行我看到:
if (getSide().equals(Side.LEFT)) {
这段代码告诉我:
@Override
public void start(Stage primaryStage) {
System.out.println(new NumberAxis(1, 2, 3).getSide());
}
>>null
似乎,无论如何你需要指定一面..
有帮助吗?