首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javafx-8中的FXML文件中绑定我自己组件的自定义属性?

如何在javafx-8中的FXML文件中绑定我自己组件的自定义属性?
EN

Stack Overflow用户
提问于 2014-03-19 13:37:47
回答 1查看 4.8K关注 0票数 3

这段代码在JavaFX2.2中运行良好,但在javafx-8 (1.8.0-b132来自oracle下载)属性的绑定中不起作用。怎么了?

test.fxml内容:

代码语言:javascript
复制
<?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内容:

代码语言:javascript
复制
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内容:

代码语言:javascript
复制
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");
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 17:39:19

这看起来像一个bug:您应该将它提交到https://javafx-jira.kenai.com

修复方法是将属性初始化为类的一个完全成熟的属性,为getBean()和getName()提供正确的值。无论如何,这是一个很好的实践,但是对于您的绑定工作来说,这可能是不必要的。

代码语言:javascript
复制
private StringProperty myText = new SimpleStringProperty(this, "myText");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22507670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档