JavaFX i ładowanie obrazków
Zdarzyć się może, że pomimo iż obrazek znajduje się w tym samym katalogu co aplikacja to nie ładuje się. Związane jest to z brakiem dynamicznego typowania w JavieFX. Jest to język skryptowy, ale nie ze wszystkim potrafi sobie on poradzić. Problem sprawia mu szczególnie rzutowanie String na URL. Generalnie nie działa to w sposób intuicyjny. Na przykład jeżeli napiszemy source: "obrazek.jpg"
to zdrowy rozsądek podpowiada, że powinniśmy otrzymać obrazek znajdujący się w bieżącym katalogu. Niestety nie ma tak dobrze. Najprostszym rozwiązaniem (poza użyciem {__DIR__}
) jest taki oto „hak”:
Listing 1. Budujemy URL ze stringa
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import java.io.File;
def currentDir = "{(new File("")).getAbsolutePath()}";
Stage {
title: "Application title";
width: 350
height: 350
scene: Scene {
content: ImageView {
image: Image {
url: "file:{x}/test.jpg"
}
}
}
}
eleganckie o ile zmienne globalne takie mogą być. Niestety JavaFX ma kilka takich niedoróbek.
Kod jest dostępny na licencji MIT. Jednak niektóre rozwiązania mogą być objęte inną licencją. W takim przypadku jest, to zaznaczone. Artykuły są dostępne na licencji CC-BY.
Jeżeli spodobał ci się ten wpis, to podziel się nim z innymi lub wesprzyj autora.