当前位置: 首页 > 知识库问答 >
问题:

如何在单击按钮后取消单击/禁用按钮

商茂勋
2023-03-14

编辑:底部的解决方案

这是一个跳棋游戏。单击一个按钮后,它等待单击第二个按钮与之交换。然而,有时你可能不想移动那个按钮,但一旦你点击了它,就没有回头路了,因为我无法禁用它。

在这里的其他帖子中,我看到人们使用

button.setVisable(false);    

这只是使它在第一次单击后不可见。

button.setCancelButton(false);    

这什么都干不了。

button.setDisable(false);    

这也没什么用。编辑:所有这些方法都用true和false进行了尝试。

private void buttonClicked(Object source) {

    boolean bool = false;

    if (!(source instanceof Button)) {         
        return;
    }

    Button button = (Button) source;

    if (clickCounter == 0) {
        first = button;
        first.setStyle("-fx-background-color: LightGreen");


    } else {

        second = button;

        bool = legalMove(GridPane.getRowIndex(first), GridPane.getColumnIndex(first), GridPane.getRowIndex(second), GridPane.getColumnIndex(second), source);
        //swap();

        System.out.println("checking the bool " + bool);
    }
    if(bool == true){

        swap();

    }
    else{
        System.out.println("Button disabled");

        //first.setVisible(false);
        //first.setCancelButton(true);
                //first.setDisable(false);
                clickCounter = 0;

    }

    System.out.println(clickCounter + " " + ((Button) source).getText());
    clickCounter = ++clickCounter % 2;



}

私有无效交换(){

    int firstRow = GridPane.getRowIndex(first);
    int firstCol = GridPane.getColumnIndex(first);

    int secondRow = GridPane.getRowIndex(second);
    int secondCol = GridPane.getColumnIndex(second);

    grid.getChildren().removeAll(first, second);
    grid.add(first, secondCol, secondRow);
    second.setText("            ");
    grid.add(second, firstCol, firstRow);

    first.setStyle(null);

}

private boolean legalMove(int firstRow, int firstCol, int secondRow, int secondCol, Object source) {   

    System.out.println("returned back");
    //can only move up/down, not diagonally 
    if (firstCol != secondCol) {
        clickCounter = 0;


        System.out.println("Can't move diagonally");

        return false;                                             
    }

    //test if the move is no more than 1 spot away
    if ((secondRow - firstRow) != 1 && (firstRow - secondRow) != 1) {
        clickCounter = 0;
        System.out.println("Can't move more than one spot");

        return false;
    }

    return killCheck();


}
 setDisable(true);     

但你也需要

 setDisable(false);   

这样它就重新启用了它,或者其他什么,我不知道为什么会这样。

if(bool == false && clickCounter == 1){
        System.out.println("Button disabled");


        first.setDisable(true);
        first.setDisable(false);
                first.setStyle(null);     //this sets the button color back to normal

                clickCounter = 0;
                return;                   //reset counter and return to top of buttonClicked() method

    }

共有1个答案

章哲茂
2023-03-14

要禁用按钮,需要将disabled-property设置为true。

button.setDisable(true);   

您可以在正式的Javadoc for node中看到这一点,它是button->的父节点

 类似资料:
  • 问题内容: 关于按下inputDialoguebox的“取消”按钮,我有一个问题。我之前也曾问过类似的问题,因此我很抱歉重复自己的道歉。 我遇到的主要问题是,无论我按取消如何,代码都将执行,即使不添加任何输入,套接字连接也不会建立。 为什么会发生这种情况,我该如何避免呢? 因此,即使我确实按了取消,也可以通过目前的方式建立clientsocket连接。原因可能是因为我在同一台计算机上将服务器和客户

  • 我正试图抓取一个页面,获取一盘国际象棋的移动列表,该列表位于右侧菜单的“移动”选项卡下。 在浏览器中手动单击“移动”选项卡时,我可以通过 哪个(正确地)返回 当尝试通过单击按钮时,使用 似乎什么都没有发生,我不知道如何进行故障排除。 如何通过模拟单击(活动事件侦听器)切换到“移动”选项卡? 额外提示:是否可以使用rvest软件包?

  • 问题内容: 我正在尝试在www.meetme.com上发送消息,但不知道该怎么做。我可以在评论区域中键入消息,但是单击“发送”按钮不会执行任何操作。我究竟做错了什么?当我登录并按登录按钮时,页面确实发生了变化,一切都很好。有人有任何想法或线索吗? 问题答案: 如果不了解正在访问的网页,就无法在禁用JavaScript的情况下执行AJAX请求。如果更改未成功,则必须继续进行调试,但请确保已启用Jav

  • 我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML:

  • 在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。

  • 我已经检查了这个链接,但它提到了长点击。但是我在点击自定义对话框的按钮后面临这个问题。我已经把我的代码贴在这里了。有人能帮我避免这个错误吗?