如何通过从文件资源管理器中选择文件来使用javaFX显示图像

如何通过从文件资源管理器中选择文件来使用javaFX显示图像,java,javafx,Java,Javafx,1.我有一个打开窗格的代码,我可以打开文件资源管理器,但当我从文件资源管理器中选择该图像时,我不知道如何打开该图像。同样,这段代码也可以在不同的@Override语句中使用,但我只使用了一条语句就做到了这一点。有没有办法从另一个Override语句调用其中一些事件 @Override public void start(Stage primaryStage) { //Stage primaryStage.setTitle("title"); BorderPan

1.我有一个打开窗格的代码,我可以打开文件资源管理器,但当我从文件资源管理器中选择该图像时,我不知道如何打开该图像。同样,这段代码也可以在不同的@Override语句中使用,但我只使用了一条语句就做到了这一点。有没有办法从另一个Override语句调用其中一些事件

  @Override
    public void start(Stage primaryStage) {
    //Stage
    primaryStage.setTitle("title");
    BorderPane pane = new BorderPane();
    Scene scene = new Scene(pane);


    Button load = new Button("Load");
    load.setOnAction(loadEventListener);

    ImageView myImageView = new ImageView();

    HBox rootBox = new HBox();
    rootBox.getChildren().addAll(load, myImageView);


    //Toolbar
    HBox toolbarArea = new HBox( 10 );
    toolbarArea.setPadding( new Insets( 10 ) );


    primaryStage.setScene(scene);
    primaryStage.show();

    //Puts buttons on bottom bar
    toolbarArea.getChildren().addAll( load );
    pane.setBottom( toolbarArea );
}

EventHandler<ActionEvent> loadEventListener
        = t -> {
            FileChooser fileChooser = new FileChooser();

            //Set extension filter
            FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
            FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
            fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);

            //Show open file dialog
            File file = fileChooser.showOpenDialog(null);

            try {
                BufferedImage bufferedImage = ImageIO.read(file);
                Image image = SwingFXUtils.toFXImage(bufferedImage, null);
                ImageView myImageView = new ImageView();
                myImageView.setImage(image);
            } catch (IOException ex) {
                Logger.getLogger(JavaFXPixel.class.getName()).log(Level.SEVERE, null, ex);
            }

        };
@覆盖
公共无效开始(阶段primaryStage){
//舞台
初级阶段。设置标题(“标题”);
BorderPane=新的BorderPane();
场景=新场景(窗格);
按钮加载=新按钮(“加载”);
load.setOnAction(loadEventListener);
ImageView myImageView=新建ImageView();
HBox根盒=新的HBox();
rootBox.getChildren().addAll(加载,myImageView);
//工具栏
HBox区域=新的HBox(10);
工具栏区域。设置填充(新插图(10));
初级阶段。场景(场景);
primaryStage.show();
//将按钮放在底部栏上
toolbarea.getChildren().addAll(加载);
窗格.setBottom(工具栏区域);
}
EventHandler loadEventListener
=t->{
FileChooser FileChooser=newfilechooser();
//设置扩展筛选器
FileChooser.ExtensionFilter extFilterJPG=newfilechooser.ExtensionFilter(“JPG文件(*.JPG)”,“*.JPG”);
FileChooser.ExtensionFilter extFilterPNG=新的FileChooser.ExtensionFilter(“PNG文件(*.PNG)”,“*.PNG”);
fileChooser.getExtensionFilters().addAll(extFilterJPG,extFilterPNG);
//显示打开文件对话框
File File=fileChooser.showOpenDialog(null);
试一试{
BuffereImage BuffereImage=ImageIO.read(文件);
Image Image=SwingFXUtils.toFXImage(bufferedImage,null);
ImageView myImageView=新建ImageView();
myImageView.setImage(图像);
}捕获(IOEX异常){
Logger.getLogger(JavaFXPixel.class.getName()).log(Level.SEVERE,null,ex);
}
};

由于您已经有了一个
图像视图,并且已经在场景中显示了它,只需将其图像设置为您加载的图像即可

为此,您需要将
ImageView
作为一个实例变量:

private ImageView myImageView ;

@Override
public void start(Stage primaryStage) {
    //Stage
    primaryStage.setTitle("title");
    BorderPane pane = new BorderPane();
    Scene scene = new Scene(pane);


    Button load = new Button("Load");
    load.setOnAction(loadEventListener);

    myImageView = new ImageView();

    HBox rootBox = new HBox();
    rootBox.getChildren().addAll(load, myImageView);

    // presumably you intended this somewhere?
    pane.setCenter(rootBox);


    //Toolbar
    HBox toolbarArea = new HBox( 10 );
    toolbarArea.setPadding( new Insets( 10 ) );


    primaryStage.setScene(scene);
    primaryStage.show();

    //Puts buttons on bottom bar
    toolbarArea.getChildren().addAll( load );
    pane.setBottom( toolbarArea );
}
注意,无需加载缓冲图像,然后对其进行转换。因此,事件处理程序中所需的只是

    loadEventListener = t -> {
        FileChooser fileChooser = new FileChooser();

        //Set extension filter
        FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
        FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
        fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);

        //Show open file dialog
        File file = fileChooser.showOpenDialog(null);

        if (file != null) {
            Image image = new Image(file.toURI().toString());
            myImageView.setImage(image);
        }

    };

谢谢,所以我改变了它,它显示了我的图像,但它以图像的本机分辨率显示。有没有办法将窗口大小设置为一定的大小,这样可以缩放图像以适应所述窗口?@JoePoti有,请参阅文档。可以指定,也可以控制图像视图的大小。