JavaFX:从DoubleProperty中减去

时间:2017-05-11 22:40:06

标签: java javafx-2

我目前正在开发一款可以使用JavaFX播放视频的应用。我想将音量滑块放在边框窗格的右侧。目前,应用程序将调整为窗口大小,这将与我的音量滑块重叠。

我有一个控制器,负责处理应用程序执行的所有操作并实现Initializable接口。这是我的initialize()方法的样子。

@Override
public void initialize(URL locate, ResourceBundle resources){

    String path = new File("src/media/dance.mp4").getAbsolutePath();
    media = new Media (new File (path).toURI().toString());
    player = new MediaPlayer(media);
    mediaView.setMediaPlayer(player);

    DoubleProperty width = mediaView.fitWidthProperty();
    DoubleProperty height = mediaView.fitHeightProperty();

    width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width"));
    height.bind(Bindings.selectDouble(mediaView.sceneProperty(), "height"));

    volumeSlider.setValue(player.getVolume() * 100);
    volumeSlider.valueProperty().addListener(new InvalidationListener() {

        @Override
        public void invalidated(Observable observable) {
            player.setVolume(volumeSlider.getValue() / 100);
        }

    });
}

我尝试在mediaView.fitWidthProperty()mediaView.sceneProperty()之后直接减去64px,但两者都给了我一个错误,因为它们不是double类型。我尝试了mediaView.fitWidthProperty().subtract(64),但它说我需要将数据类型从DoubleProperty更改为DoubleBind,这与需要DoubleProperty的Bindings.selectDouble()方法不兼容。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

EDITED

有一种更简单的方法!直接绑定到酒店:

mediaView.fitWidthProperty().bind(
    mediaView.getScene().widthProperty().subtract(64));

这是一个完整的应用程序来演示:

public class FXWidthBind extends Application {

    @Override
    public void start(Stage stage) {
        Media media = new Media("http://i.imgur.com/OJTwZuc.mp4");
        MediaPlayer player = new MediaPlayer(media);
        MediaView mediaView = new MediaView(player);

        Pane root = new Pane();
        Scene scene = new Scene(root);

        root.getChildren().add(mediaView);
        stage.setWidth(1000);
        stage.setHeight(800);
        stage.setScene(scene);
        stage.show();

        mediaView.fitWidthProperty().bind(mediaView.getScene().widthProperty().subtract(64));
        mediaView.fitHeightProperty().bind(mediaView.getScene().heightProperty());
    }

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

答案 1 :(得分:0)

解决方案是减去SceneProperty(视频屏幕)的width属性。

width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width").subtract(64.0));

在这里,我将MediaView的宽度与SceneProperty的宽度减去64像素。由于DoubleProperty是原始类型 double 的包装器,因此您可以使用subtract()方法修改下面的实际值。

<强>之前

Before

<强>后

After