JavaFX : Subtracting from DoubleProperty

标签 java javafx-2

我目前正在开发一个使用 JavaFX 播放视频的应用程序。我想将音量 slider 放置在边框 Pane 的右侧。目前,应用程序将调整大小以适应窗口的大小,该窗口将与我的音量 slider 重叠。

我有一个 Controller ,负责处理应用程序执行的所有操作并实现Initialized 接口(interface)。这是我的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() 之后直接减去 64px和mediaView.sceneProperty() ,但都给了我一个错误,因为它们不是 double 类型。我试过mediaView.fitWidthProperty().subtract(64) ,但它说我需要将数据类型从 DoubleProperty 更改为 DoubleBind,这与 Bindings.selectDouble() 不兼容需要 DoubleProperty 的方法。

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

最佳答案

已编辑

还有更简单的方法!只需直接绑定(bind)到属性即可:

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);
    }
}

关于JavaFX : Subtracting from DoubleProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43926701/

相关文章:

java - 部署 javaFx 应用程序

java - Lombok javafx 属性

java - JMS消息重新传递

java - 如何在 Java 中将本地时间转换为 LDAP 时间戳

java - 如何单击 javafx slider

javafx - 未调用 setOnMouseClick JavaFx 区域

java - 如何在 TestNG 中生成不同名称的测试?

java - 真正的 Java 泛型(模板)

java - 防止重新加载 WebView onResume()

javafx-2 - 如何在勾选或取消勾选部分项目时勾选和取消勾选所有项目