javaFX,一次有两个mouseEvents
javaFX, two mouseEvents at once
我正在尝试在我的程序中编写 window 以使用鼠标绘制线条。到目前为止,我已经有了这个解决方案:
public class TrackEditor extends Stage
{
TrackDescription editedTrackDescription;
double startX, startY;
LineTo line;
MoveTo move;
boolean pressed;
public TrackEditor()
{
Path path = new Path();
this.setTitle("New Game");
this.setResizable(false);
StackPane stackPane = new StackPane();
SquareGrid squareGrid = new SquareGrid();
Pane drawingPane = new Pane();
Pane activePane = new Pane();
stackPane.getChildren().addAll(squareGrid,drawingPane, activePane);
drawingPane.getChildren().add(path);
activePane.setOnMousePressed((MouseEvent me) -> {
pressed = true;
startX = me.getX();
startY = me.getY();
move = new MoveTo(me.getX(), me.getY());
path.getElements().add(move);
});
activePane.setOnMouseReleased((MouseEvent me) -> {
pressed = false;
line = new LineTo(me.getX(), me.getY());
path.getElements().add(line);
});
activePane.setOnMouseMoved((MouseEvent me) -> {
if(pressed)
{
activePane.getChildren().clear();
Line temporaryLine = new Line(startX, startY, me.getX(), me.getY());
activePane.getChildren().add(temporaryLine);
}
});
Scene scene = new Scene(stackPane);
this.setScene(scene);
this.initModality(Modality.APPLICATION_MODAL);
this.sizeToScene();
this.show();
}
}
但是,据我观察,按下鼠标按钮时不会绘制临时线。事件 MousePressed
和 Mouse Released
之间是否存在某种冲突,或者问题出在其他地方?
我认为您正在尝试检测鼠标何时被拖动(即何时在按下按钮的情况下移动)。你不需要自己跟踪 pressed
标志,底层事件系统会为你做这件事。
activePane.setOnMousePressed((MouseEvent me) -> {
startX = me.getX();
startY = me.getY();
move = new MoveTo(me.getX(), me.getY());
path.getElements().add(move);
});
activePane.setOnMouseReleased((MouseEvent me) -> {
line = new LineTo(me.getX(), me.getY());
path.getElements().add(line);
});
activePane.setOnMouseDragged((MouseEvent me) -> {
activePane.getChildren().clear();
Line temporaryLine = new Line(startX, startY, me.getX(), me.getY());
activePane.getChildren().add(temporaryLine);
});
我正在尝试在我的程序中编写 window 以使用鼠标绘制线条。到目前为止,我已经有了这个解决方案:
public class TrackEditor extends Stage
{
TrackDescription editedTrackDescription;
double startX, startY;
LineTo line;
MoveTo move;
boolean pressed;
public TrackEditor()
{
Path path = new Path();
this.setTitle("New Game");
this.setResizable(false);
StackPane stackPane = new StackPane();
SquareGrid squareGrid = new SquareGrid();
Pane drawingPane = new Pane();
Pane activePane = new Pane();
stackPane.getChildren().addAll(squareGrid,drawingPane, activePane);
drawingPane.getChildren().add(path);
activePane.setOnMousePressed((MouseEvent me) -> {
pressed = true;
startX = me.getX();
startY = me.getY();
move = new MoveTo(me.getX(), me.getY());
path.getElements().add(move);
});
activePane.setOnMouseReleased((MouseEvent me) -> {
pressed = false;
line = new LineTo(me.getX(), me.getY());
path.getElements().add(line);
});
activePane.setOnMouseMoved((MouseEvent me) -> {
if(pressed)
{
activePane.getChildren().clear();
Line temporaryLine = new Line(startX, startY, me.getX(), me.getY());
activePane.getChildren().add(temporaryLine);
}
});
Scene scene = new Scene(stackPane);
this.setScene(scene);
this.initModality(Modality.APPLICATION_MODAL);
this.sizeToScene();
this.show();
}
}
但是,据我观察,按下鼠标按钮时不会绘制临时线。事件 MousePressed
和 Mouse Released
之间是否存在某种冲突,或者问题出在其他地方?
我认为您正在尝试检测鼠标何时被拖动(即何时在按下按钮的情况下移动)。你不需要自己跟踪 pressed
标志,底层事件系统会为你做这件事。
activePane.setOnMousePressed((MouseEvent me) -> {
startX = me.getX();
startY = me.getY();
move = new MoveTo(me.getX(), me.getY());
path.getElements().add(move);
});
activePane.setOnMouseReleased((MouseEvent me) -> {
line = new LineTo(me.getX(), me.getY());
path.getElements().add(line);
});
activePane.setOnMouseDragged((MouseEvent me) -> {
activePane.getChildren().clear();
Line temporaryLine = new Line(startX, startY, me.getX(), me.getY());
activePane.getChildren().add(temporaryLine);
});