我正在开发一个javafx Minesweeper游戏,目前只使用鼠标左键输入。我想使用鼠标右键,也使用户可以标记可能的炸弹。我查看了Button类的Oracle网页,它说:
当按下并释放一个按钮时,就会发送ActionEvent。您的应用程序可以根据这个事件执行一些操作,方法是实现一个EventHandler来处理ActionEvent。按钮还可以通过实现EventHandler来处理MouseEvent来响应鼠标事件。
https://docs.oracle.com/javafx/2/api/javafx/scene/control/Button.html
我尝试过几种不同的方法,但都没有成功。
其中包括我当前的EventHandler代码。如果有人能解释处理左右鼠标点击的最佳方法,或者指出我在哪里找到该信息的正确方向,这是非常感谢的。
MineButton是一个扩展Button的自定义类。我希望右击标记为"m“并更改单元格颜色,而左键将保持不变。
for (int row = 0; row < 8; row++){
for (int col = 0; col <8; col++){
MineButton button = new MineButton(row, col);
button.setPrefSize(100, 100);
button.setText("?");
button.setStyle("-fx-font: 22 arial; -fx-base:#dcdcdc;");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if ( button.isAMine() == true){
button.setText("B");
for( int row1 = 0; row1 < 8; row1++){
for ( int col1 = 0; col1 < 8; col1++){
if (mineButtons[row1][col1].isAMine() == true){
mineButtons[row1][col1].setText("B");
mineButtons[row1][col1].setStyle("-fx- font: 22 arial; -fx-base: #dc143c;");
}
}
}
}
else{
recursion(mineButtons, button.getX(), button.getY());
}
}
}); 发布于 2015-12-09 09:36:06
如果您想处理MouseEvent,请使用以下代码。看起来不错。
button.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(event.getButton() == MouseButton.SECONDARY){
// Type code to set flag here
}
}
});发布于 2015-12-09 06:54:11
不能通过在操作事件上附加事件处理程序来处理按钮上的右键单击。相反,您需要向鼠标事件添加一个处理程序:
button.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
if(mouseEvent.getButton().equals(MouseButton.SECONDARY)){
System.out.println("Set flag on the button");
}
}
});发布于 2019-10-18 04:20:22
scene.setOnMousePressed(event ->{
if(event.getButton() == MouseButton.PRIMARY) {
anchorX = event.getSceneX();
anchorY = event.getSceneY();
anchorAngleX = angleX.get();
anchorAngleY = angleY.get();
}
});
scene.setOnMouseDragged((MouseEvent event) -> {
if(event.getButton() == MouseButton.PRIMARY) {
angleX.set(anchorAngleX - (anchorY - event.getSceneY()));
angleY.set(anchorAngleY - (anchorX - event.getSceneX()));
}
});此代码使用鼠标左键和拖动旋转场景中的JavaFX组。您可以打印event.getButton,以确保您的主要和次要工作。我尝试过许多其他方法,包括JavaFXtras。到目前为止,这是处理主鼠标和辅助鼠标单击事件的最简单方法。
https://stackoverflow.com/questions/34171841
复制相似问题