如何从fxml TextField获取文本 [英] How to get Text from fxml TextField

查看:95
本文介绍了如何从fxml TextField获取文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从.fxml文件的firstName和lastName框中获取文本到我的控制器.我不知道如何获取那些firstName和lastName TextFields来将文本传递给控制器​​,这样我就可以使用它们来创建人员对象

I am trying to get the text from the firstName and lastName box from my .fxml file to my controller. I can't figure out how to get those firstName and lastName TextFields to pass the text through to the controller so i can then use them to create a person object

fxml:

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Text?>

<AnchorPane id="AnchorPane" fx:id="createPersonAnchor" prefHeight="247.0" prefWidth="285.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button layoutX="171.0" layoutY="180.0" mnemonicParsing="false" onAction="#cancelCreatePersonAction" prefHeight="37.0" prefWidth="79.0" text="Cancel" />
      <TextField id="FirstName" fx:id="firstName" layoutX="115.0" layoutY="28.0" />
      <TextField id="LastName"  fx:id="lastName" layoutX="115.0" layoutY="78.0" />
      <Button layoutX="47.0" layoutY="180.0" mnemonicParsing="false" onAction="#createPersonAction" prefHeight="37.0" prefWidth="79.0" text="Create" />
      <Text layoutX="29.0" layoutY="45.0" strokeType="OUTSIDE" strokeWidth="0.0" text="First Name:" wrappingWidth="69.677734375" />
      <Text layoutX="29.0" layoutY="95.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Last Name:" wrappingWidth="69.677734375" />
   </children>
</AnchorPane>

控制器:

package project1;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;

/**
 * FXML Controller class
 *
 * @author Fomnus
 */
public class FXMLCreatePersonController implements Initializable {

    /**
     * Initializes the controller class.
     */
    public FXMLCreatePersonController(){
        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLCreatePerson.fxml"));
        loader.setController(this);
        try{
            loader.load();
        }catch(Exception e){
            System.out.println(e.getMessage()+ "FXMLCreatePersonController failed");
        }
    }
    @FXML AnchorPane createPersonAnchor;
    @FXML public void setFXMLCreatePersonAnchorPane(AnchorPane fxmlCreatePerson){
        createPersonAnchor = fxmlCreatePerson;
    }
    @FXML public AnchorPane getFXMLCreatePersonAnchorPane(){
        return createPersonAnchor;
    }
    @FXML
    private void createPersonAction(ActionEvent event) {

    }
    @FXML
    private void cancelCreatePersonAction(ActionEvent event) {
        System.out.println("Hello World");
    }
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

推荐答案

首先,将控制器设置为FXML:

First you set a controller to your FXML:

fx:controller=<Controller.Location>

然后在子目录中,使用Node旁边的Annotation @FXML进行初始化,并在初始化期间参考其在FXML.file中的ID:

then in your cotroller you use the Annotation @FXML next to the Node to be initialized refering to its id in the FXML.file during the initialization :

//Example :
@FXML TextField textfield;

最后,为每个要控制的节点设置一个ID(将游戏名称称为Node:

and finally you set an ID to each Node you want to control (refering to the name you game to the Node :

fx:id=<idFromController>

并获取文字:

textfield.getText();

这篇关于如何从fxml TextField获取文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆