2016-07-05 15 views
0

Wie ich in SceneBuilder sehen Sie für ImageView Grafik gesetzt (obwohl das Bild wird nicht funktionieren, wenn Sie das Projekt als .jar exportieren und Sie haben das Bild in das Glas).JavaFX Wie Satz Image von SceneBuilder

1) Ich möchte Bilder für einige FXML-Schaltflächen durch SceneBuilder setzen, aber ich kann nichts darüber finden.

2) Auch wird es nützlich sein, wenn Sie Informationen geben, wie mit .fxml zu tun, was ich mit getClass().getResource("image.png"); tun, so habe ich nicht manuell das auf der Java-Datei zu tun.

Edit:

Beide Antworten von Fabian und sind John Vernee korrekt sind jeweils eine für Frage 1 und 2, aber ich kann nur eine Auswahl.

Die Struktur der Ressourcenordner:

enter image description here

+1

Sie sagen, dass "das Bild nicht funktioniert, wenn Sie das Projekt als' .jar' exportieren ", aber ich denke nicht, dass das der Fall ist. Können Sie eine FXML-Datei und eine Ausgabe von 'jar tvf' auf einer JAR-Datei bereitstellen, die auf diese Weise unterbrochen wird? – jewelsea

+0

Ich kann dir den "auch" -Teil erzählen. Und ich habe ein Test-Jar gebaut, das gut mit dem Bild darin harmoniert, indem ich es aus FXML setze. –

+0

@jewelsea Ich weiß nicht, wie man es aus fxml.Ich habe es aus SceneBuilder gesetzt und das Bild muss aus dem Glas.Thats was ich meine.Wie kann ich es in das Glas und wieder arbeiten? – GOXR3PLUS

Antwort

2

In SceneBuilder ziehen Sie den graphic Knoten (in diesem Fall ImageView) von der Bibliothek zum Button in der Hierarchie Ansicht verwenden möchten. Lassen Sie es dort fallen und Sie sollten den graphic Knoten sehen, der als Kind der Button angezeigt wird.

Dies führt zu einem fxml wie diese

... 
<Button mnemonicParsing="false" text="Button"> 
    <graphic> 
     <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" /> 
    </graphic> 
</Button> 
... 

die Gangtaste neben der Bildeigenschaft der ImageView Durch die Verwendung Sie eine Bild-URL beginnend mit @ durch Auswahl Schalter relativen Pfad zu dokumentieren angeben . Eingabe image.png für die URL @image.png. Wenn Sie die fxml an der richtigen Stelle relativ zum Bild speichern, wird das Bild in SceneBuilder angezeigt.

+0

Perfecto danke für die Antwort. – GOXR3PLUS

+0

noch ein Gedanke..Es funktioniert, obwohl fitHeight und fitWidth auf 0 geändert werden müssen, damit das Bild seine ursprüngliche Breite behält. Was ist der Unterschied zwischen relativen Pfad des Dokuments und relativer Pfad des Klassenpfads? – GOXR3PLUS

+1

@ GoXr3Plus: 'fitHeight' und' fitWidth' sind nicht notwendig, wenn das Bild seine Originalgröße beibehalten soll. Der relative Pfad des Dokuments (beginnt mit '@' in der fxml) ist relativ zur Position der fxml, relativer Pfad relativ zum "package root" (beginnend mit '/' in der fxml). Einige Informationen dazu sollten irgendwo in diesem Dokument enthalten sein: https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html – fabian

1

Sie die URL für eine ImageView in FXML wie folgt einstellen:

<ImageView> 
    <image> 
     <Image url="@my_image.png" /> 
    </image> 
</ImageView> 

Es ist im selben Ordner wie die FXML Datei aussehen wird für das Bild.


Sie konnten die Grafik eines Button gesetzt, indem es von FXML Referenzierung:

<!-- Define some ImageView --> 
<fx:define> 
    <ImageView fx:id="my_image"> 
     <image> 
      <Image url="@my_image.png" /> 
     </image> 
    </ImageView> 
</fx:define> 

<!-- Reference it here --> 
<Button graphic="$my_image"/> 

Ich baue mein Glas apache maven ‚s-Plugin für Eclipse, die javafx-jar-plugin verwenden.

Wenn Sie mit Maven gearbeitet haben, können Sie dieses Plugin in pom.xml verwenden:

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.zenjava</groupId> 
      <artifactId>javafx-maven-plugin</artifactId> 
      <version>8.5.0</version> 
      <configuration> 
       <mainClass>application.MainFXML</mainClass> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

ich die FXML Datei gesetzt haben und das Bild im gleichen Ordner unter src/main/resources, so dass sie in das Glas aufgenommen werden.

Run maven Build mit der jfx:jar Ziel.

+0

Kann ich das Bild für eine Schaltfläche über SceneBuilder festlegen? 2) Ich habe einige Bilder in einem Quellordner namens Ressourcen/Bilder. Wenn ich die Datei als jar exportieren, wie es in fxml geschrieben werden muss? So (image = "@ Resources/images/image.png "? – GOXR3PLUS

+0

@ GoXr3Plus Ich konnte es nicht in SceneBuilder finden, aber ich habe es in FXML arbeiten lassen :) Ich habe die Antwort aktualisiert. –

+1

@ GoXr3Plus Wie man es schreibt, mit '' '@' '' es wird anfangen, im selben Ordner wie die FXML-Datei zu suchen. Du brauchst also einen relativen Pfad. z.B.; Wenn sich Ihre FXML-Datei in '' 'resources/fxml/my_fxml.fxml''' und das Bild in' '' resources/images/my_image.png''' befindet, sollten Sie '' '@ ../images/my_image.png'''. –

Verwandte Themen