繁体   English   中英

JavaFX,使用Button关闭错误窗口

[英]JavaFX, closing error window using Button

我的基本加密器应用程序有问题。 如果有人在keyTextField中键入字符串,我想生成一个错误窗口。 还有一个事件,使用“确定”按钮关闭错误窗口(正在从fxml文件加载窗口图形),我尝试如下所示进行操作,但是没有成功,我也使用了close()方法。 什么是处理应用程序控制的最佳方法? 我只使用MainController,我认为这不是一个好主意。 先感谢您

`package pl.gumisok.cipherController;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import pl.gumisok.cipherMain.CipherManager;

public class MainController implements Initializable {

CipherManager cipher;
@FXML
private ContentPaneController contentPaneController;

@FXML
private ControlPaneController controlPaneController;

@Override
public void initialize(URL arg0, ResourceBundle arg1) {
    // TODO Auto-generated method stub

    System.out.println(contentPaneController);
    System.out.println(controlPaneController);

    Button encryptButton = controlPaneController.getEncryptButton();
    Button decryptButton = controlPaneController.getDecryptButton();
    Button okButton = controlPaneController.getOkButton();
    TextArea cleanTextArea = contentPaneController.getCleanTextArea();
    TextArea cryptTextArea = contentPaneController.getCryptTextArea();
    TextField keyTextField = controlPaneController.getKeyTextField();

    encryptButton.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            String wiadomosc = cleanTextArea.getText();
            System.out.println(wiadomosc);
            try {
                int key = Integer.parseInt(keyTextField.getText());
                System.out.println(key);
            } catch (NumberFormatException e) {
                System.out.println(e);
                FXMLLoader fxmlLoader = new FXMLLoader(getClass()
                        .getClassLoader().getResource(
                                "pl/gumisok/cipherView/Error.fxml"));
                Parent root;
                try {
                    root = fxmlLoader.load();

                    Stage sstage = new Stage();

                    sstage.setOpacity(1);
                    sstage.setTitle("Error");
                    sstage.setScene(new Scene(root));
                    sstage.show();
                   okButton.setOnAction(x->sstage.hide());
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }

        }

    });
}

}`

希望我理解正确的问题,这是一个如何创建警报对话框的示例

Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("Information Dialog");
alert.setHeaderText(null);
alert.setContentText("I have a great message for you!");
alert.showAndWait();

您的应用程序层不好。
您需要将fxml文件中的button操作绑定到控制器。
也许是这样的:

Error.fxml:

<AnchorPane xmlns="http://javafx.com/javafx/8"
        xmlns:fx="http://javafx.com/fxml/1"
        fx:controller="controllers.ErrorController">
    <children>
        <Label text="ERROR!" />
        <Button text="close" onAction="#hide" layoutY="15"/>
    </children>
</AnchorPane>

ErrorController.java:

public class ErrorController {

    private static Stage stage;
    private static Parent root;

    public ErrorController(){}
    public ErrorController(Window owner) throws IOException {
        if (root == null)
            root = FXMLLoader.load(ClassLoader
                    .getSystemResource("views/Error.fxml"));
        if (stage == null)
            stage = new Stage();
        //stage.initModality(Modality.WINDOW_MODAL);
        stage.initOwner(owner);
        stage.setTitle("Error");
        stage.setScene(new Scene(root));
    }
    public void show() {
        stage.show();
    }
    public @FXML void hide() {
        stage.hide();
    }
}

然后用

...
error = new ErrorController(node.getScene().getWindow());
...

try {
    int key = Integer.parseInt(keyTextField.getText());
    System.out.println(key);
} catch (NumberFormatException e) {
    error.show();    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM