从textfield java fxml获取文本

时间:2016-04-22 03:55:03

标签: java fxml

这是我的fxml代码和Java控制器文件代码。我试图使用“String s = tf.getText()。toString();”从句柄事件中的TEXTFIELD文件中获取文本。但它没有被执行。

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

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane fx:id = "aPane" prefHeight="268.0" prefWidth="379.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="sample.searchController">
  <children>
  <VBox layoutX="20.0" layoutY="36.0" prefHeight="232.0" prefWidth="333.0">
     <children>
        <HBox prefHeight="36.0" prefWidth="333.0">
           <children>
              <Label fx:id= "kw" text="Key Word : ">
                 <padding>
                    <Insets right="10.0" />
                 </padding>
              </Label>
              <TextField fx:id="tf" prefHeight="25.0" prefWidth="120.0" />
              <Button fx:id="srch" mnemonicParsing="false" onAction="#handle" text="Search" >
                 <HBox.margin>
                    <Insets left="10.0" />
                 </HBox.margin>
              </Button>
           </children>
           <padding>
              <Insets left="6.0" top="6.0" />
           </padding>
           <VBox.margin>
              <Insets />
           </VBox.margin>
           <opaqueInsets>
              <Insets />
           </opaqueInsets>
        </HBox>
        <TextArea fx:id="ta" prefHeight="174.0" prefWidth="282.0" />
     </children>
  </VBox>
  </children>
  </AnchorPane>

JAVA控制器代码:

public class searchController implements Initializable,EventHandler<ActionEvent> {

  AnchorPane aPane = new AnchorPane();
  Label kw = new Label();
  public TextField tf;
  Button srch = new Button();
  TextArea ta = new TextArea();
  //Text t;
  String s = "priyam";

  @Override
  public void initialize(URL location, ResourceBundle resources) {
    // TODO Auto-generated method stub
    tf = new TextField();
  }

  @Override
  public void handle(ActionEvent arg0) {
    // TODO Auto-generated method stub
    s=tf.getText().toString();
    System.out.println(s);
  }
}

2 个答案:

答案 0 :(得分:1)

问题是你的初始化方法

public void initialize(URL location, ResourceBundle resources) {
    tf = new TextField();
}

在此方法中,您将tf设置为新文本字段。这是一个问题,因为构建fxml文档时,文档构建器将自动使用它构造的文本字段填充该字段。但是然后你的初始化方法用空白覆盖它。所以当你tf.getText()你没有从UI中的那个获取文本时,你从你自己创建的空白文本中获取它。如果您只是注释掉tf = new TextField();,那就可以了。

答案 1 :(得分:1)

方法initialize()实际上覆盖了tf的值。它使用新对象初始化您的TextField对象tf

@Override
public void initialize(URL location, ResourceBundle resources) {
  // TODO Auto-generated method stub
  tf = new TextField();
}