Это работает для меня.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class FxTemp extends Application {
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Image image = new Image("file:///home/username/Desktop/test.png");
primaryStage.setTitle("animated");
ImageView imageView = new ImageView(image);
imageView.addEventHandler(MouseEvent.MOUSE_CLICKED, evt->{
System.out.println("click");
Image imager = new Image("file:///home/username/Desktop/test.png");
imageView.setImage(imager);
});
StackPane root = new StackPane();
root.getChildren().add(imageView);
primaryStage.setScene(new Scene(root, 512, 512));
primaryStage.show();
}
}
Если я изменю test.png и нажму на вид, я увижу новое изображение.
В действительности вы не должны добавлять файлы в свои «ресурсы», это файлы, которые вы предоставляете перед выполнением.Intellij скопирует файлы в какое-то место и будет использовать это место в вашем пути к классам.Затем вы можете получить к ним доступ через getResource
.
Если у вас будет папка, в которую вы добавляете файлы, тогда вы хотите получить доступ к этим файлам, вы можете сделать что-то вроде.
String nextImage = new File("./res/image.png").toURI().toString();
Тогда вы сможете загрузить новое изображение, если ваш путь верен.