2013-06-02 59 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提出問題。 –