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