使图像动态显示在网格窗格上
Getting images to show on grid-pane dynamically
我的目标是显示从按钮激活的文件选择器中选择的图像,并将这些图像添加到我的网格窗格中。我能够从文件选择器中获得正确的 URL 文件路径名,以便制作正确的图像视图,但是这样做时我的网格窗格不显示任何正在添加的图像..
public void makeBrowseButton(Stage primaryStage) {
//attach handler
browseButton.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
FileChooser fileChooser = new FileChooser(); // create object
fileChooser.getExtensionFilters()
.addAll(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); //filter for music files
//FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
if (!parentPath.equalsIgnoreCase(
"")) { //go to previous directory if exists
File parentPathFile = new File(parentPath);
fileChooser.setInitialDirectory(parentPathFile);
}
File selectedFile = fileChooser.showOpenDialog(primaryStage);
if (selectedFile != null) { // display the dialog box
String wholePath = selectedFile.getPath();
String name = selectedFile.getName();
String megaPath = selectedFile.getAbsolutePath();
String megaUrl;
try {
megaUrl = Paths.get(megaPath).toUri().toURL().toString();
} catch (MalformedURLException e) {
throw new IllegalArgumentException(e);
}
parentPath = selectedFile.getParent();
System.out.println("wholePath: " + wholePath);
System.out.println("parent: " + parentPath);
System.out.println("File Name: " + name);
System.out.println("megaPath: " + megaUrl);
//System.out.println("Canonical: " + Canonical);
Image newAwesomeImage = new Image(megaUrl);
paneofgridmonkeys.add(new ImageView(newAwesomeImage), 0, 0);
//ImageView view = new ImageView();
//view.setImage(newAwesomeImage);
//paneofgridmonkeys.add(view, 1, 1);
//paneofgridmonkeys.setConstraints(view, 0, 4);
//paneofgridmonkeys.add(new Label("Changed the image!"), 0, 1);
createDisplay(primaryStage);
}
}
});
}
我尝试了多种插入图像的方法,这些是我得到的文件路径:
wholePath: \jupiter\yr1005\Desktop190111_1340501.jpg
parent: \jupiter\yr1005\Desktop
File Name: 20190111_1340501.jpg
megaPath: file://jupiter/yr1005/Desktop/20190111_1340501.jpg
(我正在使用 megapath)
基本上,当我从文件选择器中选择图像时,我没有收到任何错误,但选择后没有图像显示。我刚得到 return 中的所有打印语句。知道为什么吗?
这是我创建显示的方法:
public void createDisplay(Stage primaryStage) {
primaryStage.setTitle(this.MONKEY_TITLE);
GridPane paneofgridmonkeys = new GridPane();
paneofgridmonkeys.setAlignment(Pos.CENTER);
paneofgridmonkeys.setVgap(10);
paneofgridmonkeys.add(browseButton, 10, 10);
ScrollPane allTehFaces = new ScrollPane(paneofgridmonkeys);
allTehFaces.setFitToWidth(true);
primaryStage.setScene(new Scene(allTehFaces, 500, 500));primaryStage.show();
}
}
您的问题出在 createDisplay 方法中;特别是这一行:
GridPane paneofgridmonkeys = new GridPane();
这里您要创建一个名为 paneofgridmonkeys
的 locally-scoped GridPane,它必须是另一个名为 paneofgridmonkeys
的 class-level 变量的名称,因为它可供 makeBrowseButton
。当您在本地范围内执行此操作时,您创建的新实例将成为该方法内部使用的实例,而不是 class-level 实例;因此 class-level 不是添加到您的场景中的那个,您看不到变化。
我的目标是显示从按钮激活的文件选择器中选择的图像,并将这些图像添加到我的网格窗格中。我能够从文件选择器中获得正确的 URL 文件路径名,以便制作正确的图像视图,但是这样做时我的网格窗格不显示任何正在添加的图像..
public void makeBrowseButton(Stage primaryStage) {
//attach handler
browseButton.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
FileChooser fileChooser = new FileChooser(); // create object
fileChooser.getExtensionFilters()
.addAll(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); //filter for music files
//FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
if (!parentPath.equalsIgnoreCase(
"")) { //go to previous directory if exists
File parentPathFile = new File(parentPath);
fileChooser.setInitialDirectory(parentPathFile);
}
File selectedFile = fileChooser.showOpenDialog(primaryStage);
if (selectedFile != null) { // display the dialog box
String wholePath = selectedFile.getPath();
String name = selectedFile.getName();
String megaPath = selectedFile.getAbsolutePath();
String megaUrl;
try {
megaUrl = Paths.get(megaPath).toUri().toURL().toString();
} catch (MalformedURLException e) {
throw new IllegalArgumentException(e);
}
parentPath = selectedFile.getParent();
System.out.println("wholePath: " + wholePath);
System.out.println("parent: " + parentPath);
System.out.println("File Name: " + name);
System.out.println("megaPath: " + megaUrl);
//System.out.println("Canonical: " + Canonical);
Image newAwesomeImage = new Image(megaUrl);
paneofgridmonkeys.add(new ImageView(newAwesomeImage), 0, 0);
//ImageView view = new ImageView();
//view.setImage(newAwesomeImage);
//paneofgridmonkeys.add(view, 1, 1);
//paneofgridmonkeys.setConstraints(view, 0, 4);
//paneofgridmonkeys.add(new Label("Changed the image!"), 0, 1);
createDisplay(primaryStage);
}
}
});
}
我尝试了多种插入图像的方法,这些是我得到的文件路径:
wholePath: \jupiter\yr1005\Desktop190111_1340501.jpg
parent: \jupiter\yr1005\Desktop
File Name: 20190111_1340501.jpg
megaPath: file://jupiter/yr1005/Desktop/20190111_1340501.jpg
(我正在使用 megapath)
基本上,当我从文件选择器中选择图像时,我没有收到任何错误,但选择后没有图像显示。我刚得到 return 中的所有打印语句。知道为什么吗?
这是我创建显示的方法:
public void createDisplay(Stage primaryStage) {
primaryStage.setTitle(this.MONKEY_TITLE);
GridPane paneofgridmonkeys = new GridPane();
paneofgridmonkeys.setAlignment(Pos.CENTER);
paneofgridmonkeys.setVgap(10);
paneofgridmonkeys.add(browseButton, 10, 10);
ScrollPane allTehFaces = new ScrollPane(paneofgridmonkeys);
allTehFaces.setFitToWidth(true);
primaryStage.setScene(new Scene(allTehFaces, 500, 500));primaryStage.show();
}
}
您的问题出在 createDisplay 方法中;特别是这一行:
GridPane paneofgridmonkeys = new GridPane();
这里您要创建一个名为 paneofgridmonkeys
的 locally-scoped GridPane,它必须是另一个名为 paneofgridmonkeys
的 class-level 变量的名称,因为它可供 makeBrowseButton
。当您在本地范围内执行此操作时,您创建的新实例将成为该方法内部使用的实例,而不是 class-level 实例;因此 class-level 不是添加到您的场景中的那个,您看不到变化。