当前位置: 首页 > 面试题库 >

JavaFX按钮对第二次单击的反应不是第一次

祁晟
2023-03-14
问题内容

我正在尝试用JavaFX创建我的第一个应用程序,而Button调用一个方法时遇到了问题(例如,打开另一个窗口)-我总是必须单击两次才能触发操作。

这是来自控制器的代码:

import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class ControllerSignIn {

    @FXML
    private Button forgot;
    @FXML
    private Button back;
    @FXML
    private Button signin;

    public void forgetPasswordClicked() {
        forgot.setOnAction(e -> ForgotPassword.setUpWindow()); //works on 2nd click
    }

    public void backClicked() {
        back.setOnAction(e -> ForgotPassword.closeWindow()); //works on 2nd click
    }

    public void signInClicked() {
        System.out.println("Sign In CLICKED"); //works on first click
    }
}

我的方法在这里实现:

import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;

public class ForgotPassword {

    static Stage window;
    static Scene scene;
    static Parent root;

    private static void loadFXML() {
        try {
            root = FXMLLoader.load(ForgotPassword.class.getResource("ForgotPassword.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void setUpWindow() {
        loadFXML();

        scene = new Scene(root);
        scene.getStylesheets().add("signin/SignIn.css");

        window = new Stage();
        window.initModality(Modality.APPLICATION_MODAL);
        window.setTitle("Forgot Password?");
        window.setScene(scene);
        window.showAndWait();
    }

    public static void closeWindow() {
        window.close();
    }
}

问题答案:

最有可能在FXML中包含以下内容:

<Button fx:id="forgot" onAction="#forgetPasswordClicked" />

这使您的按钮可以forgot调用您的方法forgetPasswordClicked()。但是,您没有定义要在单击按钮时执行的逻辑,而是第一次说:“单击此按钮时,action event在我的按钮上放一个会叫setUpWindow()

forgot.setOnAction(e -> ForgotPassword.setUpWindow());

因此,您的第一次单击“设置”按钮的逻辑。第二次单击实际上执行了它。要解决此问题,请立即使用您的逻辑,例如:

public void forgetPasswordClicked() {
    ForgotPassword.setUpWindow();
}

或不定义要在fxml中调用的方法,然后将按钮的初始化(设置动作侦听器)移至初始化,如下所示:

public class ControllerSignIn implements Initializable {
    @FXML
    private Button forgot;
    @FXML
    private Button back;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        forgot.setOnAction(e -> ForgotPassword.setUpWindow());
        back.setOnAction(e -> ForgotPassword.closeWindow());
    }
}

这也是为什么您的signInClicked()方法从第一次单击开始就起作用的原因,因为它实际上是在执行逻辑,而不是先设置处理程序



 类似资料:
  • 当我单击submit或register时,需要两次单击才能完成任何操作。如何修复此问题?

  • 我的代码生成一个输入字段,允许用户输入要搜索的值。然后当他们单击提交按钮时,它会使displayMap为true,因此当MapDisplay组件呈现时,它将通过Map组件触发API搜索并返回随后显示在地图上的值。 问题是这个过程只工作一次。当我再次单击该按钮时,它确实做了一些事情,我确认它正在输入框中获取新值,但我似乎不知道如何再次渲染地图。 我尝试在this.setState中设置其他变量,试图

  • 我正在尝试在React中构建我的第一个计算器。我的纽扣似乎有问题(我想)。在测试s时,我发现我第一次点击添加按钮不会更新所有setState。相反,第二次单击会正确更新它。 知道它为什么不起作用吗? 我有一个名为“DaInserting”的div,当用户点击任何数字键时会更新,然后当用户点击加法/减法/等时,应该更新,但它没有。它在第二次点击时更新:-检查。 当用户点击加法/减法后,DaInser

  • 问题内容: 我正在开发我的第一个android计算器应用程序。我陷入一个单一的缺陷。我添加了几个按钮,然后单击这些按钮,它将把各自的文本放在“ 字段”上。主要问题描述如下:在运行项目时,必须单击两次按钮才能将相应的文本首次放置在字段上。例如,单击时将“ 1”放在字段上。在运行时,首先单击该按钮无效。仅在第二次单击时,它将“ 1”放在字段上。 该守则如下: XML按钮和EditField, Main

  • 我突然出现了一个奇怪的行为。我简单地将作为HBox的子节点。当我第一次单击时,它会缩小其大小并失去自己的装饰,就好像它变成了一个普通的。这种行为发生在和继承它的人身上(如JfoPhoenix的也会受到影响)。我将行为动画如下: 初始化时,工具栏下的按钮似乎也会出现此故障状态,如下所示: 我使用的FXML如下所示: 以下是影响此FXML文件的规则: 我不知道是什么影响了即使是普通的按钮。是什么导致此

  • 我在一个按钮中设置Admob中间广告触发以获得以下结果, 单击按钮并显示间隙广告 关闭广告后,继续播放视频 然后单击“上一步”按钮,返回到以前的activity 广告正在完美地显示,并继续到视频后,广告显示,但问题是,如果我再次点击按钮后,点击返回按钮,它是再现应用崩溃和停止应用程序。我在谷歌上搜索这个问题,但还是不走运。 这是我集成广告的代码, null null