URLまたはファイルチョーザを使用して画像を表示する際に問題が発生しています。私はURLからファイルを引っ張る方法や、その画像を表示する方法がわからないPCからメソッドを実装しました。私はURLから引っ張る方法を呼び出すのはここ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
ここでは私のDisplayクラスです:
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);
}
画像をペインに追加して、開始方法を呼び出してシーンを表示するにはどうすればよいですか? DisplayクラスにImageViewのインスタンスを作成してから、button0Actionメソッドからurlを含む変数catをプルできないのに、画像をペインに追加できることはわかっています。現時点では立ち往生し、ここからどこに行くのか分からない。過去数日間、幸運のないさまざまな方法を試していました。何か案は?
Displayクラス:
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();
}
}
エラーここに発生します。ここでは、ここで
pane.getChildren().add(new ImageView(fc3.fileChoice()));
を許可されていない '無効' タイプは、ファイルチューザクラスです:
ここは、これまでのところは私の変化であります
/*
* 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");
});
}
}
あなたは(グリッド - )** 'pane'に**あなたの**' catImage'を追加する必要があります**。 ** 'pane.getChildren()。add(...)' **、レイアウトを尊重します。それに、大文字で始まる変数と小文字のクラス(Javaの場合) – Ben
URLを使って動作するようになっていますが、現在はファイルの選択に問題があります。 – user3440443
私はあなたの質問を本当に理解していません。たぶんcatオブジェクト/変数を取るDisplay-Classに** Constructor **を追加できますか? (しかし、あなたのDisplay-Classはアプリケーションを拡張しますか?)ただダイアログが必要ですか? – Ben