Ich baue ein Malprogramm mit JavaFX. Ich versuche, ein Rectangle mit GraphicsContext zu zeichnen und es geschafft, es auf der Leinwand zu zeichnen. Aber egal, wo ich klicke, es beginnt immer am Ursprung. Das Rechteck wird nicht mehr gezeichnet, wenn ich die Maus loslasse (das ist korrekt), aber es wird nicht gezeichnet, wenn ich die Maus drücke. Hier ist mein Code:Wie ändere ich den Ursprung des Rectangle, das auf JavaFX gezeichnet wird, wo ich mit meiner Maus klicke?
public RectController(Canvas c, Scene s, BorderPane borderPane){
this.borderPane = borderPane;
this.scene = scene;
this.graphicsContext = canvas.getGraphicsContext2D();
rectangle = new Rectangle();
rectangle.setStrokeWidth(1.0);
rectangle.setManaged(true);
rectangle.setMouseTransparent(true);
//when you first press down on the mouse
pressMouse = event -> {
// borderPane.getChildren().add(rectangle); --> REMOVED
double startX = event.getX();
double startY = event.getY();
};
releaseMouse = event -> {
borderPane.getChildren().remove(rectangle);
double width = Math.abs(event.getX() - startX);
double height = Math.abs(event.getY() - startY);
graphicsContext.strokeRect(startX, startY, width, height);
borderPane.setOnMousePressed(null);
borderPane.setOnMouseDragged(null);
borderPane.setOnMouseReleased(null);
};
dragMouse = event -> {
rectangle.setWidth(event.getX());
rectangle.setHeight(event.getY());
};
}
Jede Hilfe wäre sehr willkommen.
Vielleicht sollten Sie zuerst die Maus x und y Ort oder die Ereignis x und y Ort. Verwenden Sie diese Werte, um zu wissen, wo ein Rechteck erstellt werden soll. Sie sollten ein neues Rechteck in Ihrem Mausklick-Handler erstellen. Außerdem sehe ich nirgendwo in Ihrem Code die Position des Rechtecks. – Sedrick
Hi @SedrickJefferson, ich setze den Ort hier: 'graphicsContext.strokeRect (startX, startY, width, height);'? Oder ist das ein falscher Weg, es zu tun? – xn139
Verwenden Sie kein Rahmenfenster. Ein Rahmenbereich ist ein Layoutbereich, der das Layout seiner untergeordneten Knoten verwaltet. Sie sollten das Rechteck in ein einfaches "Pane" setzen. –