我有一个TilePane,列出了我硬盘上不同目录的图像。我想,当点击TilePane上的图像时:
到目前为止,我点击图片时只给了ImageResources/faviicon.png
这样的内容。
我有什么方法可以使用,例如ImageResources/faviicon.png
来做1.和2.上面?谢谢大家。
这是我所拥有的课程:
public class TilePaneExample extends Application {
@Override
public void start(Stage primaryStage) {
VBox root = new VBox(30);
String[] imageResources = new String[]{
//loading images
"ImageResources/facebook.png",
"ImageResources/faviicon.png",
"ImageResources/jquery-logo.png",
"ImageResources/linkedin_32.png",
"ImageResources/loading1.png",
"ImageResources/twitter.png",
"ImageResources/twitter_32.png",
"ImageResources/wp.png",};
VBox vb = new VBox(20);
Text text4Tile = new Text("Images in TilePane");
text4Tile.setFont(Font.font("Calibri", FontWeight.BOLD, 30));
text4Tile.setUnderline(true);
VBox.setMargin(text4Tile, new Insets(10, 0, 0, 10));
//creating Flow Pane
TilePane tilePane = new TilePane();
tilePane.setHgap(5);
tilePane.setVgap(5);
for (final String imageResource : imageResources) {
Image image = new Image(getClass().getResourceAsStream(imageResource));
ImageView imageView = new ImageView(image);
imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("You clicked: " + imageResource);
}
});
tilePane.getChildren().add(imageView);
}
vb.getChildren().addAll(text4Tile, tilePane);
root.getChildren().addAll(vb);
primaryStage.setTitle("TilePane Example");
Scene scene = new Scene(root, 300, 150);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
更新
根据 DarkDarker的 建议,我这样做了:
imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
try {
System.out.println("You clicked: " + imageResource);
File f = new File(imageResource);
System.out.println(f.getAbsolutePath());
Desktop.getDesktop().open(f.getParentFile());
} catch (IOException ex) {
Logger.getLogger(TilePaneExample.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
但是,我得到了这个错误:
java.lang.IllegalArgumentException: The file: ImageResources doesn't exist.
at java.awt.Desktop.checkFileValidation(Desktop.java:209)
at java.awt.Desktop.open(Desktop.java:270)
答案 0 :(得分:0)
for (final String imageResource : imageResources) {
String imagePath = getClass().getResource(imageResource).toExternalForm();
ImageView imageView = new ImageView(new Image(imagePath));
imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("You clicked: " + imagePath);
File imageFile = new File(imagePath);
Desktop.getDesktop().open(imageFile.getParentFile()); // open a folder in explorer
Desktop.getDesktop().open(imageFile); // open file with system preferred program
}
});
tilePane.getChildren().add(imageView);
}