此代码在javafx-2.2中正常工作,但在javafx-8中无法正常工作(来自oracle下载的1.8.0-b132) 属性绑定f2.myText不起作用。怎么了?
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");
}
}
答案 0 :(得分:2)
这看起来像一个错误:你应该在https://javafx-jira.kenai.com
提交修复方法是将属性初始化为类的完全属性,为getBean()和getName()提供正确的值。无论如何,这是一种很好的做法,但对于你的绑定工作来说可能不是必需的。
private StringProperty myText = new SimpleStringProperty(this, "myText");