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

我正在尝试用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()方法从第一次单击开始就起作用的原因,因为它实际上是在执行逻辑,而不是先设置处理程序。

以上是 JavaFX按钮对第二次单击的反应不是第一次 的全部内容, 来源链接: utcz.com/qa/418659.html

回到顶部