我有一个带有标签和按钮的窗口,还有一个带有文本字段和按钮的窗口。在主窗口中,我想使用按钮打开另一个窗口,在新窗口的文本字段中输入一些内容,单击新窗口上的按钮后,我想关闭该窗口,并用输入的文本更新主窗口标签。另外,我希望新窗口是模态的。
主窗口
新窗口
public class MainController {
@FXML
public void showNewWindow() {
try {
Stage newWindowStage = new Stage();
newWindowStage.setTitle("New Window");
newWindowStage.initModality(Modality.APPLICATION_MODAL);
VBox root = FXMLLoader.load(getClass().getResource("newWindow.fxml"));
Scene scene = new Scene(root);
newWindowStage.setScene(scene);
newWindowStage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class NewWindowController {
@FXML
private TextField textField;
@FXML
public void updateMainWindowLabel() {
// update label in main window
// close new window
}
}
我知道它的设置一点都不正确,但希望它能解释我正在尝试做什么。
这是工作的示例代码(它不是最整洁的,所以我会很感激编辑)
我对模态窗口没有完全的了解,但在这里我发现了另一个与此相关的问题。
扩展应用程序的主类:
public static void main(String[] args) {
Application.launch(Test.class, args);
}
private static Stage stage1;
private static Stage stage2;
private static MyExampleController controller;
@Override
public void start(Stage primaryStage) throws Exception {
stage1 = primaryStage;
FXMLLoader loader1 = new FXMLLoader(Test.class.getResource("/test/MyExample.fxml"));
AnchorPane pane1 = (AnchorPane)loader1.load();
controller = loader1.getController();
Scene scene1 = new Scene(pane1);
stage1.setScene(scene1);
stage2 = new Stage();
FXMLLoader loader2 = new FXMLLoader(Test.class.getResource("/test/MyEx2.fxml"));
AnchorPane pane2 = (AnchorPane)loader2.load();
Scene scene2 = new Scene(pane2);
stage2.setScene(scene2);
stage1.show();
}
public static Stage getStage2(){
return stage2;
}
public static MyExampleController getController(){
return controller;
}
控制器等级1:
public class MyExampleController implements Initializable {
@FXML
private Label labLab;
@FXML
private Button btnButton;
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML
private void clickButton(ActionEvent event) {
Test.getStage2().show();
}
public void updateLabel(String newLabelText){
this.labLab.setText(newLabelText);
}
}
控制器等级2:
public class MyEx2Controller implements Initializable {
@FXML
private Button btnUpdate;
@FXML
private TextField txtField;
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML
private void doUpdateForTitle(ActionEvent event) {
Test.getController().updateLabel(txtField.getText());
Test.getStage2().close();
}
}
你需要2个阶段来做你想做的事情(不仅仅是2个场景)。
Stage st
st.setOnCloseRequest(e -> {
});
将允许在后台关闭(新窗口)时预执行您想要的任何代码。
然后在TextField对象上使用getText()
,在主stage Label对象上使用settText()
。
st.initModality(Modality.APPLICATION_MODAL);
...将使它模态。
> System.out正确显示标签上的id; 第二个控制器与嵌入在第一个控制器中的FXML文件绑定。如代码所示,第二个FXML文件/控制器是动态加载的:。 当从第二个控制器中的initialize方法设置id时,id会按预期显示在标签中: public void initialize(){this.setid(“12”);} 编辑: 此窗格声明为属性 第二个:
我是的新手,我有一个和多个场景,我可以使用在它们之间切换,所有工作都很好,直到我尝试在单击菜单项时做一些事情而不是显示场景。 我试图通过使用方法类中调用,在那里我有菜单项action methods,我调用在单击菜单项时将文本写入方法中的文本字段,但在加载该场景的控制器后,什么都没有发生。这是我的代码: 类 家庭控制器类 我知道我可能忽略了一些东西,但我不知道它是什么,帮助将不胜感激。
问题内容: 我试图在JavaFX中获得TableView来动态显示内容。 当我运行程序时,出现此错误: 我的控制器名为“ UserInterfaceController.java”,它与FXML文件位于同一软件包下,我也已将该软件包导入了FXML中。为什么找不到控制器? FXML文件: 控制器: 主类: 问题答案: 使用FXML的全限定名来引用您的控制器: 后续问题的答案 对以下问题的回答解释了为
我试图在JavaFX中获得一个TableView来动态显示内容。 当我运行程序时,出现以下错误: 我的控制器名为“UserInterfaceController.java”,它与FXML文件在同一个包下,我也在FXML中导入了包。为什么找不到控制器? FXML文件: 控制器: 主要类: