public class MyCanvas extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle(MyCanvas.class.getSimpleName());
Group root = new Group();
final Canvas canvas = new Canvas(300, 250);
GraphicsContext gc = canvas.getGraphicsContext2D();
drawShapes(gc);
final Text text = new Text("X = Y = ");
text.setTranslateX(100);
text.setTranslateY(40);
text.setFont(new Font(20));
canvas.setOnMouseMoved(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
text.setText("X = " + t.getX() + " Y = " + t.getY());
}
});
root.getChildren().addAll(canvas, text);
primaryStage.setScene(new Scene(root));
primaryStage.getScene().setFill(Color.AQUA);
primaryStage.show();
}
/**
* The main() method is ignored in correctly deployed JavaFX application.
* main() serves only as fallback in case the application can not be
* launched through deployment artifacts, e.g., in IDEs with limited FX
* support. NetBeans ignores main().
*
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
private void drawShapes(GraphicsContext gc) {
gc.setFill(Color.WHITESMOKE);
gc.fillRect(gc.getCanvas().getLayoutX(),
gc.getCanvas().getLayoutY(),
gc.getCanvas().getWidth(),
gc.getCanvas().getHeight());
gc.setFill(Color.GREEN);
gc.setStroke(Color.BLUE);
gc.setLineWidth(5);
gc.strokeLine(40, 10, 10, 40);
gc.fillOval(10, 60, 30, 30);
gc.strokeOval(60, 60, 30, 30);
gc.fillRoundRect(110, 60, 30, 30, 10, 10);
gc.strokeRoundRect(160, 60, 30, 30, 10, 10);
gc.fillArc(10, 110, 30, 30, 45, 240, ArcType.OPEN);
gc.fillArc(60, 110, 30, 30, 45, 240, ArcType.CHORD);
gc.strokeArc(10, 160, 30, 30, 45, 240, ArcType.OPEN);
}
은}
어쩌면 내가 아주 명확하게 자신을 exaplain 않았다. 사용자 정의 직사각형과 원을 만들어야합니다. 감사합니다 –
나는 내 캔버스에 있음을 의미합니다. 마우스를 드래그하면 직사각형이 생성됩니다! –
펜으로 선을 그릴 수 있다면 마우스 이벤트를 사용하여 같은 방식으로 경로/선 대신에 '모양'을 그릴 수 있다고 생각합니다. 차이점은 마우스를 놓을 때까지 마우스 이동 이벤트가 진행되는 동안 그려진 모양을 제거하고 새 모양을 다시 그려야한다는 것입니다. –