JavaFX:从 DoubleProperty 中减去
JavaFX: Subtracting from DoubleProperty
我目前正在开发一款使用 JavaFX 播放视频的应用程序。我想将音量滑块放在边框窗格的右侧。目前,应用程序将调整为 window 的大小,这将与我的音量滑块重叠。
我有一个控制器负责处理应用程序执行的所有操作并实现 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()
方法不兼容。
我怎样才能让它工作?
已编辑
有更简单的方法!直接绑定到 属性:
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);
}
}
解决方案是减去 SceneProperty(视频屏幕)的宽度 属性。
width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width").subtract(64.0));
在这里,我将我的 MediaView 的宽度与我的 SceneProperty 的宽度绑定减去 64 像素。由于 DoubleProperty 是基本类型 double 的包装器,您可以使用 subtract()
方法修改下面的实际值。
之前
之后
我目前正在开发一款使用 JavaFX 播放视频的应用程序。我想将音量滑块放在边框窗格的右侧。目前,应用程序将调整为 window 的大小,这将与我的音量滑块重叠。
我有一个控制器负责处理应用程序执行的所有操作并实现 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()
方法不兼容。
我怎样才能让它工作?
已编辑
有更简单的方法!直接绑定到 属性:
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);
}
}
解决方案是减去 SceneProperty(视频屏幕)的宽度 属性。
width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width").subtract(64.0));
在这里,我将我的 MediaView 的宽度与我的 SceneProperty 的宽度绑定减去 64 像素。由于 DoubleProperty 是基本类型 double 的包装器,您可以使用 subtract()
方法修改下面的实际值。
之前
之后