JavaFX Bild in ein Rectangle oder in eine Scene einfügen?
Nehmen wir an ich habe 2 Bilder auf dem ->Desktop<-. Einmal "Hintergrund.png" und "Kästchen.png".
Wie muss ich vorgehen, wenn ich "Hintergrund.png" als Hintergruund für die Scene und "Kästchen.png" als Bild für ein Rectangle nehmen will.
Wo muss das Bild sein? Welche Methoden brauche ich dafür?
Bitte verweist jetzt nicht auf Links oder so, ich habe schon sehr lange gesucht und nichts verstanden, weil ich nirgends herauslesen konnte, ob ich z.B. das Bild in irgendeinen Ordner des Projektes packen muss, etc.
Bitte beschreibt es an dem Beispiel mit dem Desktop, damit ich auch 100 %ig nichts falsch mache!
Ich bedanke mich im voraus schon einmal!
2 Antworten
Das müsste transparent sein, also wenn es auf dem desktop ist, sehe ich nur das gelbe

Die Scene kann kein Hintergrundbild haben, du benötigst eine Root-Komponente wie z.B.: AnchorPane.
Wo muss das Bild sein?
Ist egal. Du musst es nur in der Pfadangabe berücksichtigen. Userdesktop wäre z.b. : C:\Users\<benutzername>\Desktop
Für den einfachsten Fall kannst du die Bilder in den selben Ordner kopieren wie deine Klasse.
Rectangle sowie AnchorPane und die meisten anderen FX-UI Elemente erben allesamt von Node. Diese Klasse stellt die Methode: setStyle(); zur Verfügung.
entsprechend würde das setzen des Hintergrundbildes so aussehen:
AnchorPane root = new AnchorPane(); String image = getClass().getResource("Hintergrund.png").toExternalForm();
root.setStyle("-fx-background-image: url('" + image + "'); " + "-fx-background-position: center center; + "-fx-background-repeat: stretch;");
Alternativ kannst du auch direkt eine CSS Datei verwenden.
was machen "center", "stretch" etc.?
http://hastebin.com/owogesumeq.avrasm <- Das funktioniert irgendwie nicht, ich kriege eine Nullpointer-Exception.
was machen "center", "stretch" etc.?
Siehe JavafX CSS Dokumentation:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html
Das funktioniert irgendwie nicht, ich kriege eine Nullpointer-Exception.
Weil du auf Dateien außerhalb deines Projekts referenzierst. Exakt wie in meinem Beispiel funktioniert es, wenn das Bild im selben Ordner wie die Klasse ist.
Wenn du auf den Desktop referenzierst, versuch es so:
-fx-background-image: url('file:///C:/Users/MEINNAME/Desktop/pacman_background.png')
Vielen Dank!
Wenn ich das Projekt zu einer .jar mache, sind dann die PNGs auch in der .jar?
Nicht wenn die Datei bei dir auf dem Desktop liegt. Nur innerhalb deines Projekts.
Hierbei bedenke:
Dateien innerhalb eines Projekts werden als Ressource angesprochen. Da diese als .jar keinen Dateipfad mehr haben.
-fx-background-image: url('file:///C:/Users/MEINNAME/Desktop/pacman_background.png')
Funktioniert bei mir irgendwie nicht bei Rectangles. :/
Bei Rectangle verweise ich auf das hier:
Image img = new Image("/image/rifat.jpg");
rectangle.setFill(new ImagePattern(img));
Schreibe ich dann in die ersten Klammern einfach den Pfad, wie beim Hintergrund?
Image image = new Image("file:///C:/Users/Name/pacman_player.png");
Funktioniert nicht. :C
Habe ein transparentes Bild, aber will ein Rectangle machen, dem ein transparentes Bild zugewiesen wird, das dann über dem hintergrund zu sehen ist, wie mach ich das? weil bei mir ist das, was am bild durchsichtig sein sollte, weiß
Dann ist dein Bild vermutlich nicht Transparent, sondern weiß im Hintergrund.
Mit diversen Bildbearbeitungsprogrammen kann man das überprüfen und korrigieren.
ne das ist transparent 100 pro ich kanns dir schicken
Stimmt, das ist Transparent. Allerdings wenn ich das in den Code einbinde, ist es immer noch transparent. und funktioniert wie erwartet.
ich lads mal hoch okay? (code und das bild)
und? weisst du schon, wo der fehler liegt?
Du packst den Hintergrund samt dem Rest in eine Group. Daher wird da auch nichts transparent.
Nim einfach ein Panel darüber. z.B. ein AnchorPane. Setze hier den Background und füge deine VBox als Child an.
Und was machen die jeweiligen "Befehle"?