2016-07-08 7 views
1

Ich habe eine Imageview in meinem Menü, die eine Vorschau einer ausgewählten Karte zeigt.Skalieren einer ImageView auf eine bestimmte Höhe in JavaFX

Aber diese Karten können in der Größe variieren, in meinem Menü habe ich genug horizontalen Platz, aber vertikal habe ich Grenzen. Also, was ich will, ist, die ImageView in einer Weise zu skalieren, dass seine Höhe 40 Pixel (ich habe auch ein Problem hier) und es ist Breite Änderung entsprechend in einer Weise, dass es nicht verformt.

Auch würde ich es so sehr schätzen, wenn es eine Möglichkeit ist, die Höhe automatisch Anpassung an die Höhe der Stadt Linie haben (seine Eltern) Hier ist mein Code:.

Label mapChooserLabel = new Label("This is the map you will play on, click to change"); 
try { 
    mapPreview = new ImageView(
     new Image(getClass().getResource("/files/images/maps/" + chosenMapName + ".gif").toURI().toURL().toString()) 
    ); 
    mapPreview.setFitHeight(40); 
    mapPreview.setOnMouseClicked(event -> System.out.println("towerChooserPopup should open now!")); 
} catch (MalformedURLException | URISyntaxException e) { 
    e.printStackTrace(); 
} 
HBox mapChooserWrapper = new HBox(mapChooserLabel, mapPreview); 
mapChooserWrapper.setId("lineWrapper"); 

Und hier ist mein CSS:

#lineWrapper{ 
    -fx-alignment: center; 
    -fx-spacing: 2px; 
} 

Antwort

4

können Sie die setPreserveRatio Methode der ImageView verwenden:

Gibt an, ob das Seitenverhältnis des Quellbilds beim Skalieren beibehalten werden soll, damit es an das Bild innerhalb der passenden Begrenzungsbox angepasst wird.

Wenn auf true gesetzt, es wirkt sich auf die Dimensionen dieser Image im folgt *

  • Wenn nur fitWidth gesetzt, Höhe skaliert Verhältnis
  • zu bewahren Wenn nur fitheight gesetzt ist, Breite skaliert Verhältnis
  • zu bewahren Wenn beide gesetzt sind, sie beide skaliert werden können, um die beste Anpassung in einer Breite von Höhe Rechteck zu erhalten, während das ursprüngliche Seitenverhältnis beibehalten

Also, in Ihrem Code:

mapPreview.setFitHeight(40); 
mapPreview.setPreserveRatio(true); 

Oder Sie könnten sogar die Image auf Belastung mit its constructor die Größe:

mapPreview = new ImageView(
    new Image(getClass().getResource("/files/images/maps/" + chosenMapName + ".gif").toURI().toURL().toString(), 
     40, 200, true, true)); 

Aber in Ihrem Fall, wie Sie dies als eine verwenden möchten Vorschau, es ist vernünftiger, es in der Originalgröße zu laden und die Bildreferenz zu speichern, dann könnten Sie es verwenden, wenn das Originalbild angezeigt wird, um das Neuladen des Bildes zu vermeiden.

Verwandte Themen