gpt4 book ai didi

java - BorderPane JavaFX 加载图像时自动调整大小

转载 作者:行者123 更新时间:2023-12-01 11:08:24 28 4
gpt4 key购买 nike

这段代码:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

import java.io.File;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("main.fxml"));

primaryStage.setTitle("Load an Image");
primaryStage.setScene(new Scene(root));

BorderPane mainBorderPane = (BorderPane) primaryStage.getScene().lookup("#mainBorderPane");
mainBorderPane.setPadding(new Insets(8));

HBox controls = new HBox();
Button loadBtn = new Button("Load Image");
Button sobelEdgeDetectionBtn = new Button("Sobel Edge Detection");
loadBtn.setMaxWidth(Double.MAX_VALUE);
sobelEdgeDetectionBtn.setMaxWidth(Double.MAX_VALUE);

setBrowseFileAction(loadBtn);

controls.setSpacing(8);
controls.getChildren().addAll(loadBtn,sobelEdgeDetectionBtn);
mainBorderPane.setBottom(controls);

primaryStage.sizeToScene();
primaryStage.show();
}

private void setBrowseFileAction(Button loadBtn) {
loadBtn.setOnAction((event) -> {
Object source = event.getSource();
Scene scene = ((Node) source).getScene();
Stage stageOfEvent = (Stage) ((Node) source).getScene().getWindow();
BorderPane mainBorderPane = (BorderPane) scene.lookup("#mainBorderPane");
ImageView imageView = new ImageView();

FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("JPG","*.jpg"),
new FileChooser.ExtensionFilter("JPEG","*.jpeg")
);
fileChooser.setTitle("Choose file...");
fileChooser.setInitialDirectory(
new File(System.getProperty("user.home"))
);
File file = fileChooser.showOpenDialog(stageOfEvent);

if(file != null) {
Image image = new Image("file:"+file.getAbsolutePath());
imageView.setImage(image);
mainBorderPane.setCenter(imageView);
stageOfEvent.sizeToScene();

}
});
}

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

main.fxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>

<BorderPane id="mainBorderPane" />

..没有做我想做的事。

我想加载图像,然后调整窗口大小并将其在屏幕上居中,无论图像大小如何。

花了太多时间。有什么简单快速的解决方案吗?我可以通过添加大量代码来做到这一点,我确信 JavaFX 的糟糕文档已经有了一个可以实现我想要的方法。

最佳答案

在setBrowseFileAction中的if语句末尾添加:

            stageOfEvent.setWidth(image.getWidth()+40);
stageOfEvent.setHeight(image.getHeight()+40);

关于java - BorderPane JavaFX 加载图像时自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com