首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javafx Minesweeper:如何区分鼠标左右键输入

javafx Minesweeper:如何区分鼠标左右键输入
EN

Stack Overflow用户
提问于 2015-12-09 06:08:22
回答 3查看 2.2K关注 0票数 1

我正在开发一个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“并更改单元格颜色,而左键将保持不变。

代码语言:javascript
复制
    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());

                    }       
                }   
            }); 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-09 09:36:06

如果您想处理MouseEvent,请使用以下代码。看起来不错。

代码语言:javascript
复制
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
                }
            }
        });
票数 1
EN

Stack Overflow用户

发布于 2015-12-09 06:54:11

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

代码语言:javascript
复制
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");
        }
    }
});
票数 3
EN

Stack Overflow用户

发布于 2019-10-18 04:20:22

代码语言:javascript
复制
 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。到目前为止,这是处理主鼠标和辅助鼠标单击事件的最简单方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34171841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档