javafx扫雷器:如何区分鼠标右键和左键输入

javafx扫雷器:如何区分鼠标右键和左键输入,javafx,mouseevent,eventhandler,minesweeper,Javafx,Mouseevent,Eventhandler,Minesweeper,我正在开发一款javafx扫雷游戏,目前只使用鼠标左键输入。我想使用鼠标右键也让用户可以标记可能的炸弹。我查看了Oracle Button类的网页,它说: “当按下并释放按钮时,将发送ActionEvent。应用程序可以通过实现EventHandler来处理ActionEvent来执行基于此事件的某些操作。按钮还可以通过实现EventHandler来处理MouseEvent来响应鼠标事件。” 我尝试了几种不同的方法,但没有成功 包括我当前的EventHandler代码。如果有人能解释一下鼠标左

我正在开发一款javafx扫雷游戏,目前只使用鼠标左键输入。我想使用鼠标右键也让用户可以标记可能的炸弹。我查看了Oracle Button类的网页,它说:

“当按下并释放按钮时,将发送ActionEvent。应用程序可以通过实现EventHandler来处理ActionEvent来执行基于此事件的某些操作。按钮还可以通过实现EventHandler来处理MouseEvent来响应鼠标事件。”

我尝试了几种不同的方法,但没有成功

包括我当前的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());

                    }       
                }   
            }); 
for(int行=0;行<8;行++){

对于(int col=0;col,您不能通过在操作事件上附加事件处理程序来处理右键单击按钮。相反,您需要向鼠标事件添加处理程序:

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");
        }
    }
});
button.setOnMouseClicked(新建EventHandler()){
@凌驾
公共无效句柄(MouseEvent MouseEvent){
if(mouseEvent.getButton().equals(MouseButton.SECONDARY)){
System.out.println(“在按钮上设置标志”);
}
}
});

您无法通过在操作事件上附加事件处理程序来处理右键单击按钮。相反,您需要向鼠标事件添加处理程序:

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");
        }
    }
});
button.setOnMouseClicked(新建EventHandler()){
@凌驾
公共无效句柄(MouseEvent MouseEvent){
if(mouseEvent.getButton().equals(MouseButton.SECONDARY)){
System.out.println(“在按钮上设置标志”);
}
}
});

如果你想处理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
                }
            }
        });
button.addEventFilter(MouseEvent.MOUSE_单击,新建EventHandler()){
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getButton()==MouseButton.SECONDARY){
//在此处键入要设置标志的代码
}
}
});

如果你想处理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
                }
            }
        });
button.addEventFilter(MouseEvent.MOUSE_单击,新建EventHandler()){
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getButton()==MouseButton.SECONDARY){
//在此处键入要设置标志的代码
}
}
});

此代码使用鼠标左键和拖动在场景中旋转JavaFX组。您可以打印event.getButton以确保您的主和次鼠标正在工作。我尝试了许多其他方法,包括JavaFXtras。这是迄今为止处理主和次鼠标单击事件的最简单方法


此代码使用鼠标左键和拖动来旋转场景中的JavaFX组。您可以打印event.getButton以确保您的主要和次要组正常工作。我尝试了许多其他方法,包括JavaFXtras。这是迄今为止处理主要和次要鼠标单击事件的最简单方法。

在我的代码中添加了此选项EventHandler,工作得很好!能够标记地雷使我的扫雷游戏更接近原始游戏。现在我可以添加一个计时器、地雷左侧计数器和一个确定玩家是否有地雷的函数。我认为确定胜利的函数将检查除地雷以外的所有空格是否都被标记或发现。将此添加到我的代码中在我的EventHandler之前,它工作得非常好!能够标记地雷使我的扫雷游戏更接近原始游戏。现在我可以添加一个计时器、地雷左侧计数器和一个确定玩家是否有地雷的函数。我认为确定胜利的函数将检查除地雷以外的所有空格是否都被标记或发现。此代码为r使用鼠标左键和拖动在场景中旋转JavaFX组。您可以打印event.getButton以确保您的主要和次要组正常工作。我尝试了许多其他方法,包括JavaFXtras。这是迄今为止处理主要和次要鼠标单击事件的最简单方法。此代码在具有鼠标左键并拖动。您可以打印event.getButton以确保您的主要和次要操作正常。我尝试了许多其他方法,包括JavaFXtras。这是迄今为止处理主要和次要鼠标单击事件的最简单方法。