java - 如何使 FXML 生成的按钮起作用

标签 java javafx javafx-8 fxml scenebuilder

我正在使用 JavaFX 为学校项目编写程序。我正在 SceneBuilder 8 中设计 UI,它正在为我生成 FXML。我的问题是,如何将按钮和 slider 等连接到我的 java 代码?它与 XCode 中的按钮编码类似吗?

这是我的 FXML 源代码(如果有帮助的话):

<?import javafx.scene.effect.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>

<SplitPane dividerPositions="0.3996655518394649" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="470.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
  <items>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="398.0" prefWidth="145.0">
         <children>
            <TableView layoutY="33.0" prefHeight="323.0" prefWidth="180.0" AnchorPane.bottomAnchor="42.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="33.0">
              <columns>
                <TableColumn prefWidth="77.0" text="Event" />
                <TableColumn prefWidth="101.0" text="Suggested time" />
              </columns>
               <columnResizePolicy>
                  <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
               </columnResizePolicy>
               <effect>
                  <Blend />
               </effect>
            </TableView>
            <Label layoutY="6.0" prefHeight="27.0" prefWidth="90.0" text="Event view">
               <font>
                  <Font size="18.0" />
               </font>
            </Label>
            <Button layoutY="368.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="34.0" text="+">
               <font>
                  <Font name="System Bold" size="14.0" />
               </font>
            </Button>
         </children></AnchorPane>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="398.0" prefWidth="267.0">
         <children>
            <Label layoutY="7.0" prefHeight="27.0" prefWidth="90.0" text="Detail view">
               <font>
                  <Font size="18.0" />
               </font>
            </Label>
            <GridPane layoutX="14.0" layoutY="34.0" prefHeight="120.0" prefWidth="258.0">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" maxWidth="124.0" minWidth="10.0" prefWidth="87.0" />
                <ColumnConstraints hgrow="SOMETIMES" maxWidth="176.0" minWidth="10.0" prefWidth="171.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints maxHeight="30.0" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints maxHeight="75.0" minHeight="10.0" prefHeight="59.0" vgrow="SOMETIMES" />
                <RowConstraints maxHeight="60.0" minHeight="10.0" prefHeight="31.0" vgrow="SOMETIMES" />
                  <RowConstraints maxHeight="25.0" minHeight="0.0" prefHeight="0.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <Label text="Name" />
                  <Label text="Details" GridPane.rowIndex="1" />
                  <Label text="Estimated time" GridPane.rowIndex="2" />
                  <TextField promptText="Enter name" GridPane.columnIndex="1" />
                  <TextField promptText="Enter estimated time" GridPane.columnIndex="1" GridPane.rowIndex="2" />
                  <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Enter details" GridPane.columnIndex="1" GridPane.rowIndex="1" />
               </children>
            </GridPane>
            <Button layoutX="219.0" layoutY="372.0" mnemonicParsing="false" text="Done" />
            <Button layoutX="152.0" layoutY="372.0" mnemonicParsing="false" text="Cancel" />
         </children></AnchorPane>
  </items>
</SplitPane>

感谢您提供的任何帮助!

编辑:为了澄清,我有一个 FXML 文件、一个 Controller 类和一个构造函数类。我需要连接到我的 Controller 类。

最佳答案

定义 Controller 类后,您可以将 FXML 文件链接到它。在 SceneBuilder 中,展开左下角的“ Controller ”标题 Pane ,然后输入 Controller 类的完全限定名称。

要为按钮指定处理程序方法,请选择该按钮,然后展开标题为“代码”的 Pane (右侧面板的底部 Pane )。例如,您可以在“操作时”字段中添加操作处理程序的方法名称。

enter image description here

如果您在没有 SceneBuilder 的情况下执行此操作,则添加属性 fx:controller="..."到 FXML 的根元素,指定完全限定的类名。对于按钮,您可以添加 onAction="#methodName"<Button ... >元素,指定按下按钮时要执行的方法的名称。该方法应该采用 ActionEvent 类型的单个参数,或者没有参数。

关于java - 如何使 FXML 生成的按钮起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735703/

相关文章:

java - 如何在Java的类构造函数中两次使用Scanner?

java - java字符位置歧义

java - Java 中的一个接口(interface)可以有且只能有一个 public 修饰符。为什么其余的不允许?

java - 访问FXML生成的节点

scroll - 如何在 setText 之后滚动 JavaFX TextArea

java - Kotlin 和 Java 中带有嵌套类的泛型

java - 错误: Undefined function or variable - java in MATLAB

javafx - 输入键事件在 Javafx 对话框中不起作用?

java - 应用程序启动方法中出现异常 java.lang.reflect.InitationTargetException JavaFX 图像转换

java - AWT 面板未在 JFX 中渲染