Javafx 拖动时绘制圆角矩形失败
我试图在javafx中拖动鼠标时绘制一个带有圆角的简单矩形。 第一个问题:我无法使左上角变圆。 第二个问题:我希望我的应用程序能够画出漂亮的全圆角矩形,而不是像我图片中的第二个。 请问,我怎样才能修理这些? 提前感谢你的帮助 这是我的密码:Javafx 拖动时绘制圆角矩形失败,javafx,javafx-2,Javafx,Javafx 2,我试图在javafx中拖动鼠标时绘制一个带有圆角的简单矩形。 第一个问题:我无法使左上角变圆。 第二个问题:我希望我的应用程序能够画出漂亮的全圆角矩形,而不是像我图片中的第二个。 请问,我怎样才能修理这些? 提前感谢你的帮助 这是我的密码: import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; im
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage){
stage.setTitle("Test");
root = new BorderPane();
Scene scene = new Scene(root, 400, 400);
paintings = new Group();
stage.setScene(scene);
canvas = new Rectangle(0, 0, stage.getScene().getWidth(), stage.getScene().getHeight());
canvas.setFill(Color.WHITE);
addHandlers();
root.setCenter(canvas);
root.getChildren().add(paintings);
stage.show();
}
private void paintRectangle(){
roundedRect = new Rectangle(pressedX,
pressedY,
draggedX - pressedX,
draggedY - pressedY);
roundedRect.setFill(Color.RED);
roundedRect.setArcHeight(40);
roundedRect.setArcWidth(40);
paintings.getChildren().add(roundedRect);
}
private void addHandlers(){
canvas.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
pressedX = me.getX();
pressedY = me.getY();
}
});
canvas.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
/* If I make the drawing in here, I get round corners, but it doesn't get drawn while dragging*/
//paintRectangle();
}
});
canvas.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
draggedX = me.getX();
draggedY = me.getY();
paintRectangle();
}
});
}
double pressedX, pressedY;
double draggedX, draggedY;
Rectangle canvas;
Group paintings;
Rectangle roundedRect;
BorderPane root;
}
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
公共类主扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
公众假期开始(阶段){
阶段。设置标题(“测试”);
root=新边框窗格();
场景=新场景(根,400400);
绘画=新组();
舞台场景;
画布=新矩形(0,0,stage.getScene().getWidth(),stage.getScene().getHeight());
画布。设置填充(颜色。白色);
addHandlers();
root.setCenter(画布);
root.getChildren().add(绘画);
stage.show();
}
私有void paintRectangle(){
roundedRect=新矩形(按X,
按,
draggedX-pressedX,
draggedY-pressedY);
圆形选边填充(颜色为红色);
圆形直射集光(40);
圆截面设置弧宽(40);
paints.getChildren().add(roundedRect);
}
私有void addHandlers(){
setOnMousePressed(新的EventHandler(){
@凌驾
公共无效句柄(MouseEvent me){
pressedX=me.getX();
pressedY=me.getY();
}
});
setOnMouseReleased(新的EventHandler(){
@凌驾
公共无效句柄(MouseEvent me){
/*如果我在这里画画,我会画圆角,但拖动时不会画*/
//paintRectangle();
}
});
setOnMouseDrawed(新的EventHandler(){
@凌驾
公共无效句柄(MouseEvent me){
draggedX=me.getX();
draggedY=me.getY();
paintRectangle();
}
});
}
双按X,按Y;
双draggedX,draggedY;
矩形画布;
组画;
矩形圆形;
边缘根;
}
这是我的照片:
我无法检查您的代码,但这里有一种替代方法。您可以将其与代码合并:
import javafx.application.Application;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Daer extends Application {
BorderPane pane;
Rectangle rect;
SimpleDoubleProperty rectinitX = new SimpleDoubleProperty();
SimpleDoubleProperty rectinitY = new SimpleDoubleProperty();
SimpleDoubleProperty rectX = new SimpleDoubleProperty();
SimpleDoubleProperty rectY = new SimpleDoubleProperty();
@Override
public void start(Stage stage) {
pane = new BorderPane();
Scene scene = new Scene(pane, 800, 600);
stage.setScene(scene);
scene.setOnMouseDragged(mouseHandler);
scene.setOnMousePressed(mouseHandler);
scene.setOnMouseReleased(mouseHandler);
rect = getNewRectangle();
rect.widthProperty().bind(rectX.subtract(rectinitX));
rect.heightProperty().bind(rectY.subtract(rectinitY));
pane.getChildren().add(rect);
stage.show();
}
EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
if (mouseEvent.getEventType() == MouseEvent.MOUSE_PRESSED) {
rect.setX(mouseEvent.getX());
rect.setY(mouseEvent.getY());
rectinitX.set(mouseEvent.getX());
rectinitY.set(mouseEvent.getY());
} else if (mouseEvent.getEventType() == MouseEvent.MOUSE_DRAGGED) {
rectX.set(mouseEvent.getX());
rectY.set(mouseEvent.getY());
} else if (mouseEvent.getEventType() == MouseEvent.MOUSE_RELEASED) {
// Clone the rectangle
Rectangle r = getNewRectangle();
r.setX(rect.getX());
r.setY(rect.getY());
r.setWidth(rect.getWidth());
r.setHeight(rect.getHeight());
pane.getChildren().add(r);
// Hide the rectangle
rectX.set(0);
rectY.set(0);
}
}
};
private Rectangle getNewRectangle() {
Rectangle r = new Rectangle();
r.setFill(Color.web("blue", 0.1));
r.setStroke(Color.BLUE);
r.setArcHeight(40);
r.setArcWidth(40);
return r;
}
public static void main(String[] args) {
launch(args);
}
}
导入javafx.application.application;
导入javafx.beans.property.SimpleDoubleProperty;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
公共类Daer扩展应用程序{
边框窗格;
矩形矩形;
SimpleDoubleProperty rectinitX=新的SimpleDoubleProperty();
SimpleDoubleProperty rectiny=新的SimpleDoubleProperty();
SimpleDoubleProperty rectX=新的SimpleDoubleProperty();
SimpleDoubleProperty rectY=新的SimpleDoubleProperty();
@凌驾
公众假期开始(阶段){
窗格=新边框窗格();
场景=新场景(窗格,800600);
舞台场景;
场景。SetonMouseDrawed(鼠标手柄);
场景。设置鼠标按下(鼠标手柄);
场景。setOnMouseReleased(鼠标手柄);
rect=getNewRectangle();
widthProperty()绑定(rectX.subtract(rectinitX));
rect.heightProperty().bind(rectY.subtract(rectinitY));
pane.getChildren().add(rect);
stage.show();
}
EventHandler mouseHandler=neweventhandler(){
@凌驾
公共无效句柄(MouseEvent MouseEvent){
if(mouseEvent.getEventType()==mouseEvent.MOUSE_按下){
setX(mouseEvent.getX());
setY(mouseEvent.getY());
rectinitX.set(mouseEvent.getX());
set(mouseEvent.getY());
}else if(mouseEvent.getEventType()==mouseEvent.MOUSE\u拖动){
set(mouseEvent.getX());
set(mouseEvent.getY());
}else if(mouseEvent.getEventType()==mouseEvent.MOUSE_已释放){
//克隆矩形
矩形r=getNewRectangle();
r、 setX(rect.getX());
r、 setY(rect.getY());
r、 setWidth(rect.getWidth());
r、 setHeight(rect.getHeight());
pane.getChildren().add(r);
//隐藏矩形
rectX.set(0);
矩形集(0);
}
}
};
私有矩形getNewRectangle(){
矩形r=新矩形();
r、 setFill(Color.web(“蓝色”,0.1));
r、 设定行程(颜色:蓝色);
r、 setArcHeight(40);
r、 设置弧宽(40);
返回r;
}
公共静态void main(字符串[]args){
发射(args);
}
}
我无法检查您的代码,但这里有一种替代方法。您可以将其与代码合并:
import javafx.application.Application;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Daer extends Application {
BorderPane pane;
Rectangle rect;
SimpleDoubleProperty rectinitX = new SimpleDoubleProperty();
SimpleDoubleProperty rectinitY = new SimpleDoubleProperty();
SimpleDoubleProperty rectX = new SimpleDoubleProperty();
SimpleDoubleProperty rectY = new SimpleDoubleProperty();
@Override
public void start(Stage stage) {
pane = new BorderPane();
Scene scene = new Scene(pane, 800, 600);
stage.setScene(scene);
scene.setOnMouseDragged(mouseHandler);
scene.setOnMousePressed(mouseHandler);
scene.setOnMouseReleased(mouseHandler);
rect = getNewRectangle();
rect.widthProperty().bind(rectX.subtract(rectinitX));
rect.heightProperty().bind(rectY.subtract(rectinitY));
pane.getChildren().add(rect);
stage.show();
}
EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
if (mouseEvent.getEventType() == MouseEvent.MOUSE_PRESSED) {
rect.setX(mouseEvent.getX());
rect.setY(mouseEvent.getY());
rectinitX.set(mouseEvent.getX());
rectinitY.set(mouseEvent.getY());
} else if (mouseEvent.getEventType() == MouseEvent.MOUSE_DRAGGED) {
rectX.set(mouseEvent.getX());
rectY.set(mouseEvent.getY());
} else if (mouseEvent.getEventType() == MouseEvent.MOUSE_RELEASED) {
// Clone the rectangle
Rectangle r = getNewRectangle();
r.setX(rect.getX());
r.setY(rect.getY());
r.setWidth(rect.getWidth());
r.setHeight(rect.getHeight());
pane.getChildren().add(r);
// Hide the rectangle
rectX.set(0);
rectY.set(0);
}
}
};
private Rectangle getNewRectangle() {
Rectangle r = new Rectangle();
r.setFill(Color.web("blue", 0.1));
r.setStroke(Color.BLUE);
r.setArcHeight(40);
r.setArcWidth(40);
return r;
}
public static void main(String[] args) {
launch(args);
}
}
导入javafx.application.application;
导入javafx.beans.property.SimpleDoubleProperty;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
公共类Daer扩展应用程序{
边框窗格;
矩形矩形;
SimpleDoubleProperty rectinitX=新的SimpleDoubleProperty();
SimpleDoubleProperty rectinitY=新SimpleDouble