首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助显示来自url或filechooser的图像

需要帮助显示来自url或filechooser的图像
EN

Stack Overflow用户
提问于 2016-09-28 07:08:42
回答 1查看 1.1K关注 0票数 1

我在使用url或filechooser显示图像时遇到了问题。我已经实现了从url或pc中提取文件的方法,只是不确定如何显示这些图像。

这里我调用从url提取的方法:

代码语言:javascript
运行
复制
@FXML
private void button0Action (ActionEvent event) throws IOException {

        catdog c = new catdog();
        String cat = c.cat();           
        System.out.println(cat);

输出对话框返回url:500.gif

这是我的展示课:

代码语言:javascript
运行
复制
package screensaver;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class Display extends Application {
    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        GridPane pane = new GridPane();
        pane.setAlignment(Pos.CENTER);
        pane.setHgap(0);
        pane.setVgap(0);

        Scene scene = new Scene(pane);
        primaryStage.setTitle("imageViewer"); 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
    }
}

创建了显示和ImageView的新实例:

代码语言:javascript
运行
复制
@FXML
private void button0Action (ActionEvent event) throws IOException {

        catdog c = new catdog();
        String cat = c.cat();           
        System.out.println(cat);

        Display catDisplay = new Display();
        ImageView catImage = new ImageView(cat);

}

然后如何将图像添加到窗格并调用start方法来显示场景?我知道我可以在Display类中创建一个ImageView实例,然后将一个图像添加到窗格中,尽管我无法从button0Action方法中提取包含url的变量cat。现在卡住了,不知道从这里往哪里走。在过去的几天里一直在努力尝试不同的方法却没有运气。有什么想法吗?

到目前为止,我的变化如下:

展示级:

代码语言:javascript
运行
复制
package screensaver;

import java.io.IOException;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class Display {
public void showImage0 (String url) throws IOException {

    Stage stage = new Stage();
    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setHgap(0);
    pane.setVgap(0);

    Catdog c = new Catdog();
    pane.getChildren().add(new ImageView(c.cat()));

    Scene scene = new Scene(pane);
    stage.setTitle("imageViewer"); 
    stage.setScene(scene); 
    stage.show(); 
}

public void showImage1 (String url) throws IOException {

    Stage stage = new Stage();
    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setHgap(0);
    pane.setVgap(0);

    Catdog d = new Catdog();
    pane.getChildren().add(new ImageView(d.dog()));

    Scene scene = new Scene(pane);
    stage.setTitle("imageViewer"); 
    stage.setScene(scene); 
    stage.show(); 
}

public void showImage2 (String url) throws IOException {

    Stage stage = new Stage();
    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setHgap(0);
    pane.setVgap(0);

    LandscapeImage lI = new LandscapeImage();
    pane.getChildren().add(new ImageView(lI.imageSource));

    Scene scene = new Scene(pane);
    stage.setTitle("imageViewer"); 
    stage.setScene(scene); 
    stage.show(); 
}

public void showImage3 (String file) throws IOException {

    Stage stage = new Stage();
    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setHgap(0);
    pane.setVgap(0);

    FileChooser fc3 = new FileChooser();

    pane.getChildren().add(new ImageView(fc3.fileChoice()));

    Scene scene = new Scene(pane);
    stage.setTitle("imageViewer"); 
    stage.setScene(scene); 
    stage.show(); 
    }
}

错误发生在这里:此处不允许使用“void”类型。

代码语言:javascript
运行
复制
pane.getChildren().add(new ImageView(fc3.fileChoice()));

下面是FileChooser类:

代码语言:javascript
运行
复制
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package screensaver;

import java.io.File;
import java.io.IOException;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;

/**
 *
 * @author Jacob
 */
public class FileChooser {
void fileChoice () throws IOException{
    javafx.stage.FileChooser fc3 = new javafx.stage.FileChooser();
    File selectedFile = fc3.showOpenDialog(null);

    fc3.getExtensionFilters().addAll(
        new javafx.stage.FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"));


    if (selectedFile != null) {

        String location = (selectedFile.getAbsoluteFile().toURI().toString());
        System.out.println(location);

        Display ownDisplay = new Display();
        ownDisplay.showImage3(location);
    } else {

        Alert alert = new Alert(Alert.AlertType.CONFIRMATION,"No file was selected");

        alert.showAndWait()
        .filter(response -> response == ButtonType.OK)
        .ifPresent((ButtonType response) -> {
            System.out.println("OK");
        });
    }
}
}

最新代码:

显示方法:

代码语言:javascript
运行
复制
public void showImage3 (String file) throws IOException, Exception {

    Stage stage = new Stage();
    GridPane pane = new GridPane();
    pane.setAlignment(Pos.CENTER);
    pane.setHgap(0);
    pane.setVgap(0);

    pane.getChildren().add(new ImageView(file));

    Scene scene = new Scene(pane);
    stage.setTitle("imageViewer"); 
    stage.setScene(scene); 
    stage.show(); 
    }

button3Action方法:

代码语言:javascript
运行
复制
@FXML
private void button3Action(ActionEvent event) throws IOException, Exception {

       FileChooser fc3 = new FileChooser();
       File selectedFile = fc3.showOpenDialog(null);

        fc3.getExtensionFilters().addAll(
        new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"));


    if (selectedFile != null) {

        String location =   (selectedFile.getAbsoluteFile().toURI().toString());
        System.out.println(location);
        Display fileChoice = new Display();
        fileChoice.showImage3(location);

    } else {

        Alert alert = new Alert(AlertType.CONFIRMATION,"No file was selected");

        alert.showAndWait()
        .filter(response -> response == ButtonType.OK)
        .ifPresent((ButtonType response) -> {
            System.out.println("OK");
        });

    }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-09-28 10:45:30

编辑2:

因为我不能再跟随你了,试着理解这个例子(它是完全有效的)。

这将有助于解决问题:

代码语言:javascript
运行
复制
public class TestClass extends javafx.application.Application
{
   @Override
   public void start(javafx.stage.Stage primaryStage) 
   {
      javafx.scene.control.Button button = new javafx.scene.control.Button("click me");
      button.setOnAction((javafx.event.ActionEvent event) -> { chooseImageAndDisplay(); });

      javafx.scene.layout.BorderPane pane = new javafx.scene.layout.BorderPane();
      pane.setCenter(button);
      pane.setPrefSize(300, 200);
      javafx.scene.Scene scene = new javafx.scene.Scene(pane);
      primaryStage.setTitle("imageViewer"); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
   }

   private void chooseImageAndDisplay() 
   {
      javafx.stage.FileChooser fc = new javafx.stage.FileChooser();
      fc.getExtensionFilters().addAll(new javafx.stage.FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"));

      java.io.File selectedFile = fc.showOpenDialog(null);

      if (selectedFile != null) 
      {
         String location = (selectedFile.getAbsoluteFile().toURI().toString());

         javafx.scene.layout.BorderPane pane = new javafx.scene.layout.BorderPane();
         pane.setPrefSize(300, 200);
         javafx.scene.image.ImageView iw = new javafx.scene.image.ImageView(location);
         pane.setCenter(iw);

         javafx.scene.Scene scene = new javafx.scene.Scene(pane);
         javafx.stage.Stage stage = new javafx.stage.Stage();
         stage.setTitle("imageViewer"); 
         stage.setScene(scene); 
         stage.show(); 
      }
   }

   public static void main(String[] args)
   {
      launch(args);
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39740355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档