关闭另一个窗口时更新JavaFX页面中的元素

因此,我有一个程序从带有按钮和标签的主屏幕开始。我要这样做,以便当有人单击按钮时,会弹出一个新窗口。然后,通过在新窗口的文本字段中输入一些文本并单击提交按钮,新窗口将关闭,并且主屏幕中的标签文本将设置为用户输入。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<?import javafx.geometry.Insets?>
<AnchorPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="HomeController" prefHeight="400.0" prefWidth="600.0">
    <VBox prefHeight="400.0" prefWidth="600.0">
        <children>
            <Label  fx:id="label" prefWidth="100" prefHeight="50">
                <VBox.margin>
                    <Insets top="75" left="250"/>
                </VBox.margin>
            </Label>
            <Button fx:id="button" prefWidth="100" prefHeight="50" text="Button" onaction="#buttonClick">
                <VBox.margin>
                    <Insets top="150" left="250"/>
                </VBox.margin>
            </Button>
        </children>
    </VBox>
</AnchorPane>
import javafx.event.actionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.io.IOException;

public class HomeController {
    @FXML
    private Button button;
    @FXML
    private static Label label;

    public void buttonClick(actionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getclass().getResource("alert.fxml"));
        Stage window = new Stage();

        window.initStyle(StageStyle.UNDECORATED);
        window.initModality(Modality.APPLICATION_MODAL);
        window.setScene(new Scene(root));
        window.show();
    }

    public static Label getLabel() {
        return label;
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<?import javafx.geometry.Insets?>
<AnchorPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="AlertController" prefHeight="200.0" prefWidth="300.0">
    <VBox prefHeight="200.0" prefWidth="300.0">
        <children>
            <TextField fx:id="text" prefWidth="200" prefHeight="25">
                <VBox.margin>
                    <Insets top="37.5" left="50" right="50"/>
                </VBox.margin>
            </TextField>
            <Button fx:id="submit" prefWidth="100" prefHeight="25" text="Submit" onaction="#submit">
                <VBox.margin>
                    <Insets top="75" left="100"/>
                </VBox.margin>
            </Button>
        </children>
    </VBox>
</AnchorPane>
import javafx.event.actionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class AlertController {
    @FXML
    private TextField text;

    public void submit(actionEvent actionEvent) {
        String str = text.getText();
        Stage window = (Stage) ((Node) actionEvent.getsource()).getScene().getWindow();
        HomeController.getLabel().setText(str);
        window.close();
    }
}

不同的fxml控制器如何相互通信?由于创建控制器类的实例似乎无法正常工作,因此我尝试使家用控制器中的标签静态化,但是当我尝试在另一个控制器中更新其文本时,将引发NullPointerException。 还有其他办法吗

iCMS 回答:关闭另一个窗口时更新JavaFX页面中的元素

我在JavaFX Stage close event handler找到了答案 就像在原始调用函数中为新窗口添加onHidding事件处理程序一样简单

本文链接:https://www.f2er.com/1926170.html

大家都在问