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