如何将fxml中textarea的文本绑定到控制器中的自定义属性?

时间:2014-05-10 07:21:14

标签: binding properties javafx fxml

我有一个fxml文件:

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<HBox 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="my.AppController">
    <children>
        <TextArea prefHeight="200.0" prefWidth="200.0" text="${ddd}"/>
    </children>
</HBox>

您可以看到我想使用${ddd}将textarea的文本绑定到my.AppController的自定义属性。

my.AppController的代码:

public class AppController {

  @FXML
  public StringProperty ddd = new SimpleStringProperty("dddddddddd");
}

当我运行这个javafx应用程序时,它没有在textarea中显示任何内容,似乎它无法从ddd绑定到AppController

正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

截至2015年2月和Java 8,似乎不支持此功能。你不能在FXML中使用表达式绑定到控制器,我猜你必须在控制器初始化代码中这样做。

实际上我非常失望,这使得JavaFX FXML与WPF XAML相比技术要弱得多。

答案 1 :(得分:1)

要使TextArea文本绑定到属性,请使用fx:id。将fx:id分配给TextArea,在控制器中使用它并将其textProperty()绑定到您喜欢的任何属性。您甚至可以直接声明文本(如果您正在寻找它)。

<TextArea fx:id="textArea" prefHeight="200.0" prefWidth="200.0"/>

<强>控制器

public class AppController {

  @FXML
  private TextArea textArea;

  ...

  public void initialize(URL location, Resources resources) {
       textArea.textProperty().bind(customProperty);
       //textArea.setText("dddddddddd");
  }

  ...

}