用JavaFX实现图片(和按钮)随窗口大小变化而变化
原理:添加两个事件,监控窗体宽高属性,设置一个系数f,再设置imageView的宽高。
环境:idea
看代码吧,都有注释。。。
public class Main extends Application {
Button button;
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception{
//申明image
Image image;
//image实例化
image = new Image("./img/background.png");
//创建ImageView对象
ImageView imageView = new ImageView(image);
//创建AnchorPane(根面板)对象
AnchorPane anchorPane = new AnchorPane();
//加入imageView以显示图片
anchorPane.getChildren().add(imageView);
Scene scene1 = new Scene(anchorPane);
//申明按钮
button = new Button("提交");
//设置按钮属性
button.setLayoutX(1375);
button.setLayoutY(800);
button.setPrefHeight(100);
button.setPrefWidth(250);
button.setFont(Font.font(30));
//布局类
Group group = new Group();
//布局类上放按钮
group.getChildren().add(button);
StackPane stackPane = new StackPane();
stackPane.getChildren().add(group);
// Scene scene2 = new Scene(stackPane);
anchorPane.getChildren().add(group);
primaryStage.setScene(scene1);
// primaryStage.setScene(scene2);
//添加事件
primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double f = newValue.doubleValue()/1080;
//设置图片的高度
imageView.setFitHeight(1080*f);
//设置按钮的高度
button.setPrefHeight(100*f);
//设置按钮字体大小
button.setFont(Font.font(30*f));
//设置按钮位置Y
button.setLayoutY(800*f);
}
});
primaryStage.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double f = newValue.doubleValue() / 1920;
//设置图片的宽度
imageView.setFitWidth(1920 * f);
//设置按钮的宽度
button.setPrefHeight(250*f);
//设置按钮字体大小
button.setFont(Font.font(30*f));
//设置按钮位置X
button.setLayoutX(1375*f);
}
});
//三个组键都没有(最小化 最大化 关闭)
primaryStage.initStyle(StageStyle.TRANSPARENT);
//全屏显示
primaryStage.setFullScreen(true);
primaryStage.show();
}