2016-11-30 21 views
0

我在SceneBuilder中创建了包含画布对象的场景。现在我试图在画布上画任何东西,但没有出现。也许有人可以告诉我我做错了什么。谢谢你的建议。JavaFX我无法在场景构建器中创建的画布上绘制任何东西

这里是画布对象的声明:

public class ApplicationControler implements Initializable { 

    @FXML 
    public Canvas artHorizon; 

和应吸取了东西的方法:

public void drawOval(){ 
    artHorizon = new Canvas(400, 400); 
    GraphicsContext gc = artHorizon.getGraphicsContext2D(); 

    gc.setFill(Color.DARKRED); 
    gc.fillOval(110, 30, 50, 50); 
} 

和主类:

public class Main extends Application { 

@Override 
public void start(Stage stage) throws Exception { 

    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/application/MainPane.fxml")); 
    Parent parent = fxmlLoader.load(); 
    Scene scene = new Scene(parent); 


    stage.setScene(scene); 
    stage.setTitle("Login Page"); 
    stage.show(); 

    ApplicationControler controller = fxmlLoader.getController(); 
    controller.drawOval(); 

} 

public static void main(String[] args) { 
    launch(args); 
} 

}

+0

artHorizo​​n = new Canvas(400,400);这可能是你的问题。我从来没有试图在画布上绘画,但是atrHorizo​​n已经创建并且您正在创建一个新画布。 – Sedrick

+0

我从来没有尝试过controller.drawOval();主要。为什么不创建一个按钮,在按下时绘制一个形状或在drawOval中放入system.out.println(“hello”)以确保它正在运行? – Sedrick

回答

1

我想你应该删除:

artHorizon = new Canvas(400, 400); 

看看你是否可以做这样的事情:

artHorizon.setHeight(400); 
artHorizon.setWidth(400); 
2

您已经使用了这样你的画布已经被初始化“fx:id”(在FXML文件)注释@FXML时你加载你的控制器,所以尝试删除实例化,你可以直接使用带注释的画布:

artHorizon = new Canvas(400, 400); // to delete 
相关问题