2013-06-02 38 views
1

如何绘制单个轴到窗格?JavaFX绘制单轴

它给了我一个运行时异常,如果我天真地试图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

什么是例外?探索代码 - 是正确的方式! =) –

+0

清理它很好,很简单,任何想法? – BAR

回答

1

观察一些代码版本,在年线附近744我看到:

if (getSide().equals(Side.LEFT)) { 

而这个代码表示我:

@Override 
public void start(Stage primaryStage) { 
    System.out.println(new NumberAxis(1, 2, 3).getSide()); 
} 

>>null 

看来,你需要指定反正侧..

帮助?

+0

好的观察,代码现在运行。但尝试将其设置为Side.BOTTOM,并将Side.TOP绘制在底部。这里还有其他问题吗? – BAR

+0

根据javadoc:ObjectProperty \t一面 该轴正在绘制的图的一侧 如果不是这样 - 向javafx-jira提出问题。 –