2016-11-05 5 views
0

Я хотел бы использовать кнопку, чтобы получить некоторые вещи, нарисованные на моем холсте JavaFX.JavaFX: рисовать холст нажатой кнопкой через контроллер

package sample; 

import javafx.fxml.FXML; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.control.Button; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.ArcType; 
import javafx.scene.control.Label; 

public class Controller { 

    @FXML 
    Canvas canvas1; 

    @FXML 
    Label label; 

    public void onButtonPress(){ 
     System.out.println("test"); 
     Canvas canvas1 = new Canvas(300, 250); 
     GraphicsContext gc = canvas1.getGraphicsContext2D(); 
     drawShapes(gc); 
     label.setText("test"); 
    } 

    public void drawShapes(GraphicsContext gc) { 
     gc.setFill(Color.GREEN); 
     gc.setStroke(Color.BLUE); 
     gc.setLineWidth(5); 
     gc.strokeLine(40, 10, 10, 40); 
     gc.fillOval(10, 60, 30, 30); 
    } 
} 

Когда я нажимаю кнопку, ничего не происходит. Холст в файле XML определяется следующим образом:

<Canvas fx:id="canvas1" height="200.0" layoutX="30.0" layoutY="14.0" width="552.0" /> 

Может кто-нибудь мне помочь?

ответ

2

Вы создаете новый холст и нарисовываете его вместо рисования на холсте, который был создан в файле FXML.

Удалить линию

Canvas canvas1 = new Canvas(300, 250); 
0

, как сказал, вместо создания нового холста вам просто нужно использовать вы аннотированный один:

@FXML Canvas canvas1; 

и, наконец, сделать вашу фигуру, которую нужно выполнить действие с вашего контроллера.