当前位置: 首页 > 知识库问答 >
问题:

当用FXML加载JavaFX中的FXML文件时,如何在第二个控制器上自动启动动作事件?

易镜
2023-03-14
public void startNewScene() throws IOException {
    root = FXMLLoader.load(getClass().getResource("FXML.fxml"));
    Scene scene = new Scene(root);
    Stage stage = new Stage();
    stage.setScene(scene);
    stage.show();
}
public class MyController implements Initializable {
    @FXML private Button button;
    @FXML private Label label;

    @FXML
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
               label.setText("hello there,  you clicked me"); 
            }
    }
);
    }
}

FXML文件:

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ciacv.MyController">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <Label fx:id="label"  />
      <Button fx:id="button" mnemonicParsing="false"  text="Button" GridPane.columnIndex="1" />
   </children>
</GridPane>

共有1个答案

古弘
2023-03-14

fxml中按钮的fx:idbutn1,与在控制器中一样,您正在尝试用声明注入按钮

@FXML private Button button;

您需要使用在fxml中声明的fx:id来正确地将对象注入到其引用中,即。

@FXML private Button butn1;

编辑-根据注释

public void startNewScene() throws IOException {
    root = FXMLLoader.load(getClass().getResource("FXML.fxml"));
    Scene scene = new Scene(root);
    Stage stage = new Stage();
    stage.setScene(scene);
    stage.show();
}

编辑-2

不,您还没有编写任何内容来在加载fxml时设置标签中的文本。

你刚刚写了

label.setText("hello there,  you clicked me");` 
@Override
public void initialize(URL location, ResourceBundle resources) {
    // Set Label's text intialize() is called
    label.setText("Helll There...");`
    // Set Label's text on Button's action
    button.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
           label.setText("hello there,  you clicked me"); 
        }
    }
}
 类似资料:
  • 更新 我试过很多解决办法,但都没有达到我的目标。应用程序加载UsersMainPageController,它只包含一个AnchorPane(类似于父控件),因此这是相关代码: [UsersMainPageController]

  • 问题内容: 当我在JavaFX中调用FXMLLoader#load()时会发生什么? 假设FXML控制器扩展了具有构造函数的类。是否可以保证构造函数将被调用?如果没有,将如何创建该对象的新实例?例如,在下面的代码中,是否将调用TextField()构造函数? 我已经尝试过搜索这个,但是除了“从FXML文档中加载对象层次结构”之外,似乎没有关于它的文档。来自http://docs.oracle.co

  • 我已经试着搜索了这篇文章,但是除了“从FXML文档加载对象层次结构”之外,似乎没有关于它的文档。摘自http://docs.oracle.com/javafx/2/api/javafx/fxml/fxmlloader.html 你的回答将不胜感激。多谢!

  • 我一直在做一个桌面应用程序,在那里我需要使用JavaFX。我在使用Scene Builder构建的eclipse上的JavaFX项目中创建了各种FXML文件。除了这个讨厌的文件(fxmlimglist.FXML)外,我加载任何FXML文件都没有问题。 其主要思想是,当按下一个按钮时,会出现一个新窗口。下面是该按钮的事件处理程序的代码: package explorer中的项目如下所示: https

  • 因此,在我尝试编写JavaFX教程和FXML示例时。但是,每当我在.fxml文件中向GridPane中添加一些内容时,程序就会崩溃。它打开一个普通的GridPane,如果没有其他东西放在其中。 } 究竟是什么原因导致它坠毁?

  • 问题内容: 我试图在JavaFX中获得TableView来动态显示内容。 当我运行程序时,出现此错误: 我的控制器名为“ UserInterfaceController.java”,它与FXML文件位于同一软件包下,我也已将该软件包导入了FXML中。为什么找不到控制器? FXML文件: 控制器: 主类: 问题答案: 使用FXML的全限定名来引用您的控制器: 后续问题的答案 对以下问题的回答解释了为