我在使用 URL 或文件选择器显示图像时遇到问题。我已经实现了从 URL 或 PC 中提取文件的方法,只是不确定如何显示这些图像。
这里是我调用从 url 中提取的方法的地方:
@FXML
private void button0Action (ActionEvent event) throws IOException {
catdog c = new catdog();
String cat = c.cat();
System.out.println(cat);
输出对话框返回 url: http://24.media.tumblr.com/tumblr_llmbvhAcsF1qg20muo1_500.gif
这是我的显示类:
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();
}
}
创建了 Display 和 ImageView 的新实例:
@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);
}
如何将图像添加到 Pane 并调用 start 方法来显示场景?我知道我可以在 Display 类中创建 ImageView 的实例,然后将图像添加到 Pane 中,尽管我无法从 button0Action 方法中提取包含 url 的变量 cat 。此刻陷入困境,不知道该去哪里。这几天一直在努力尝试不同的方法,但没有运气。有什么想法吗?
这是迄今为止我的更改:
显示类别:
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”类型
pane.getChildren().add(new ImageView(fc3.fileChoice()));
这是 FileChooser 类:
/*
* 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");
});
}
}
}
最新代码:
显示方式:
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方法:
@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");
});
}
}
最佳答案
编辑2:
因为我已经无法真正追随你了
尝试理解这个例子(它完全有效)。
这应该有助于解决您的问题:
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);
}
}
关于java - 需要帮助显示来自 url 或文件选择器的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740355/