2014-03-19 55 views
2

此代码在javafx-2.2中正常工作,但在javafx-8中不能工作(oracle下载版本为1.8.0-b132) 属性f2.myText的绑定不起作用。怎么了?如何在javafx-8的FXML文件中绑定自己组件的自定义属性?

test.fxml内容:

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

<AnchorPane 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"> 
<children> 
    <TextField fx:id="f1" layoutX="70" text="${f2.myText}" layoutY="20" /> 
    <MyTextField fx:id="f2" layoutX="70" layoutY="60" /> 
</children> 
</AnchorPane> 

MyTextField.java内容:

package javafx8test; 

import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.control.TextField; 

public class MyTextField extends TextField{ 
    private StringProperty myText = new SimpleStringProperty(); 

    public MyTextField(){ 
     super(); 
     textProperty().addListener(new ChangeListener<String>(){ 
      @Override 
      public void changed(ObservableValue<? extends String> ov, String t, String t1) { 
       myText.set("("+t1+")"); 
      } 
     }); 
    } 

    public StringProperty myTextProperty(){ 
     return myText; 
    } 

    public void setMyText(String str){ 
     myText.set(str); 
    } 

    public String getMyText(){ 
     return myText.get(); 
    } 

} 

Javafx8Probs.java内容:

package javafx8test; 
import java.net.URL; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.TextField; 
import javafx.stage.Stage; 

public class Javafx8Probs extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 

     URL url =Javafx8Probs.class.getResource("test.fxml"); 
     FXMLLoader fxmlLoader = new FXMLLoader(url); 
     Parent root = (Parent) fxmlLoader.load(); 

     Stage s = new Stage(); 

     Scene scene=new Scene(root); 
     s.setScene(scene); 

     s.show(); 

     TextField f1 = (TextField)scene.lookup("#f1"); 
     MyTextField f2 = (MyTextField)scene.lookup("#f2"); 

     f2.setMyText("asdasd"); 
    } 

} 

回答

2

这看起来像一个错误:你应该提交它在https://javafx-jira.kenai.com

解决的办法是将您的属性初始化为类的完全属性,为getBean()和getName()提供正确的值。无论如何,这是一个很好的做法,但可能不应该是你绑定工作所必需的。

private StringProperty myText = new SimpleStringProperty(this, "myText"); 
+0

似乎重要的是初始化属性名称,而不是bean。 –

相关问题