2016-12-03 17 views
0

Meine Frage ist, wie erreicht man eine automatische Größenanpassung von Bildern während der Manipulation mit der Größe des Anwendungsfensters in JavaFX? Könnte das direkt in SceneBuilder gemacht werden?JavaFX FXML-SceneBuilder-Bild-resizable

+0

Verwandte: [Ändern der Größe von Bildern an den übergeordneten Knoten] (http://stackoverflow.com/questions/12630296/resizing-images-to-fit-the- Parent-Node) und [Wie skaliere ich ein Bild, wenn ich die Größe des Fensters in JavaFX ändere] (http://stackoverflow.com/questions/22993550/how-to-resize-an-image-when-resizing-the-window-in -javafx) – jewelsea

Antwort

2

Es würde mit der Bindung seiner WidthProperty und HeightProperty an die Größe des Fensters arbeiten. Nehmen wir an, dass der Knoten root die Größe des Fensters widerspiegelt.

ImageView iv = new ImageView(); 
iv.fitWidthProperty().bind(root.widthProperty()); 
iv.fitHeightProperty().bind(root.heightProperty()); 

Jetzt kratzt es mit der Unterkunft Eltern (root). Sie können auch den anderen Knoten auswählen oder einen Teil der Berechnung ausführen, um die Größe zu ändern.

2

Verwendung kein ImageView, aber wenn Sie für eine Region ein Bild als Hintergrundbild hinzufügen, das heißt die Region der Größe verändert und so kann das Hintergrundbild werden können, wenn die entsprechenden Einstellungen verwendet werden. Z.B. Sie könnten die folgenden CSS-Eigenschaften zu verwenden, um das Stackoverflow-Logo in einem Region enthalten.

-fx-background-image: url('http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png?v=9c558ec15d8a'); 
-fx-background-size: contain; 
-fx-background-repeat: no-repeat; 
-fx-background-position: center; 

(In dem obigen Code des Eigenschaftsname und der Wert von : getrennt sind und die ; ist nicht Teil des Wertes Es ist geschrieben, wie Sie es in der Regel in einem CSS-Stylesheet schreiben würden.)

Sie contain mit stretch ersetzen können, um nicht das Seitenverhältnis zu erhalten. In diesem Fall benötigen Sie die Eigenschaft -fx-background-position nicht.

Mehr Informationen über die verwendeten Eigenschaften können im CSS doc for Region.

finden Dies sollte so lange arbeiten, wie Sie es in die Region hinzufügen, die der Größe verändert wird. Wenn Sie das Bild auf die gesamte Szenengröße skalieren möchten, müssen Sie die Eigenschaften im Stammverzeichnis Pane festlegen.

Ansonsten müssten Sie wahrscheinlich ein benutzerdefiniertes Steuerelement schreiben. (AFAIK ist es nicht möglich, Expression-Binding von SceneBuilder zu verwenden.)