这段代码在JavaFX2.2中运行良好,但在javafx-8 (1.8.0-b132来自oracle下载)属性的绑定中不起作用。怎么了?
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");
}
}发布于 2014-03-19 17:39:19
这看起来像一个bug:您应该将它提交到https://javafx-jira.kenai.com
修复方法是将属性初始化为类的一个完全成熟的属性,为getBean()和getName()提供正确的值。无论如何,这是一个很好的实践,但是对于您的绑定工作来说,这可能是不必要的。
private StringProperty myText = new SimpleStringProperty(this, "myText");https://stackoverflow.com/questions/22507670
复制相似问题