簡體   English   中英

Java-場景構建器-切換場景后,TextField和ComboBox中的用戶輸入消失

[英]Java - Scene Builder - User input in TextField and ComboBox disappears after switching a scenes

我的Java項目中的場景很少,而我確實不知道如何解決這個問題。 第一個場景叫做“ Zadanie”。 第一個場景中有TextFields和ComboBoxes,稱為“ Zadanie”。 因此,如您在圖像中看到的,我在TextFields中寫了一些數字,並在ComboBoxes中選擇了一些選項。 然后,我通過單擊“Vypočítať”(按鈕上方)打開其他場景。 然后我又回到了第一個場景“ Zadanie”,但是TextFields和ComboBoxes中的所有內容都消失了。 回到第一個場景“ Zadanie”。 請給我一些代碼示例或一些如何使它們保持在第一場景的方法。 謝謝。

問題是,當您切換屏幕時,代表屏幕的對象將被丟棄。 因此,任何變量(例如用戶輸入)也將被丟棄。 當您切換回屏幕時,它是一個不同的對象,但具有相同的類型。 這意味着變量(例如用戶輸入)的值是新實例化/初始化的。

解決方案:創建一些存儲此信息的全局變量(例如,Main中的變量,但為了編程實踐,應使用不同的類)。 當用戶單擊以切換屏幕時,但在實際切換(卸載)屏幕之前,請將所有用戶輸入存儲在全局變量中。 然后,當切換回屏幕時,將這些變量從全局變量重新加載到字段中。

Global.java

class Global {
    public static String nameFieldValue;
    public static String ageFieldValue;
}

PersonForm.java

class PersonForm extends BorderPane {
    Button closeButton;
    TextField nameField;
    TextField ageField;

    public PersonForm() {
        this.nameField = new TextField(...);
        this.ageField = new TextField(...);
        this.closeButton = new Button("Close Window");

        // set layouts of buttons here.

        if (Global.nameFieldValue != null) {
            this.nameField.setText(Global.nameFieldValue);
        }
        if (Global.passwordFieldValue != null) {
            this.passwordField.setText(Global.passwordFieldValue);
        }

        PersonForm thisForm = this; // So that EventHandler cna use this.
        this.closeButton.setOnAction(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                Global.nameFieldValue = thisForm.nameField.getText();
                Global.passwordFieldValue = thisForm.passwordField.getText();
                // switch screens.
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM