我有这个fxml文件
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<StackPane opacity="1.0" prefHeight="700.0" prefWidth="1024.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="engine.scene.ctrler">
<children>
<ImageView fitHeight="701.7022094726562" fitWidth="1235.874704009025" pickOnBounds="true" preserveRatio="true" visible="true" StackPane.alignment="CENTER">
<effect>
<Glow level="0.9371069182389937" />
</effect>
<image>
<Image url="@../../../resources/img/bg.jpg" />
</image></ImageView></children></stackpane>
我希望在我的场景大小改变时改变我的imageView的宽度和高度。我知道我应该使用这个
stage.widthProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
myImageView.setFitWidth(stage.getWidth());
}
});
但我不知道如何从fxml文件中获取ImageView
答案 0 :(得分:3)
我想你需要它是一个控制器。
首先,您必须在FXML的StackPane行上添加以下属性
FX:控制器=&#34; the.package.ControllerName&#34;
带有Id的ImageView上的属性:
FX:ID =&#34;图像标识&#34;
当然,.package是您要使用的Controller的包。
要实现控制器,请创建一个具有所需名称的新类,并扩展StackPane并覆盖initialize方法:
package the.package;
public class ControllerName extends StackPane{
@FXML
ImageView imageId;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
//You can add code here.
//With JavaFX2
widthProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
myImageView.setFitWidth(stage.getWidth());
}
});
//With JavaFX8 Using Lambdas
widthProperty().addListener((ov, t, t1) ->
myImageView.setFitWidth(getWidth()));
}
}
如果这不起作用,则需要在控制器中创建一个调整ImageView大小的新公共方法。您可以从已实现的阶段侦听器中调用此方法。
告诉我这不是你想要的地方。
P.S - 我有一个使用这个概念的小项目here!