JavaFX绑定到媒体源属性

时间:2015-11-28 22:10:24

标签: java javafx-8

希望我能得到一些帮助。我试图将字符串变量绑定到FXML中的source属性。

FXML如下所示

<MediaView fx:id="media" x="0" y="200" fitHeight="800" fitWidth="1000" visible="true">
            <mediaPlayer>
                <MediaPlayer fx:id="videoPlayer" autoPlay="false"   >
                    <media>
                        <Media fx:id="currentlyPlaying" source="${controller.songURL}"/>
                    </media>

                </MediaPlayer>
            </mediaPlayer>
        </MediaView>

这给了我错误:

引起:javafx.fxml.LoadException:无法绑定到无类型对象。

显然是因为我试图绑定到引用项。

实现这一目标的首选方法是什么(我理解这是一个相对术语,我道歉)这样我可以让文件播放的不只是一个示例视频?

谢谢!

**编辑的标题,匆忙打字。我一直在研究这个问题。到目前为止没有运气。

1 个答案:

答案 0 :(得分:0)

source不是Media中的可写属性:它是仅可通过构造函数设置的最终值。因此无法绑定它(因为它无法改变)。同样,mediaMediaPlayer中的常量值。

因此,您需要安排将MediaView的{​​{1}}属性绑定到控制器的mediaPlayer属性。我在FXML中看不到任何方法:您需要在控制器的songURL方法中执行此操作。像

这样的东西
initialize()

(假设您在控制器中定义了media.mediaPlayerProperty().bind(Bindings.createObjectBinding(() -> { Media m = new Media(songURL.get()); MediaPlayer player = new MediaPlayer(m); player.setAutoPlay(false); return player ; }, songURL));

然后,您只需删除FXML中StringProperty songURL标记的内容:

<MediaView>