2013-06-02 4 views
1

Как я могу нарисовать одну ось на панели?JavaFX Draw a Single Axis

Это дает мне исключение во время выполнения, если я наивно пытаться addAll(axis)

Я просматривал источник XYChart ответов о том, как он рисует ось.

EDIT:

Источник

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)) { 

И этот код говорит me:

@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. –