Wie man die Größe eines Bildes, wenn die Größe des Fensters in JavaFX
Möchte ich ein Bild in der Größe geändert werden automatisch, wenn der Benutzer das Hauptfenster. Ist das möglich?
Ich habe den folgenden code, setzt ein Fenster einer bestimmten Größe. Außerdem lädt das Bild von einer externen URL.
@Override
public void start(Stage primaryStage) {
MenuBar menuBar=new MenuBar();
Menu menuGame = new Menu("Game");
MenuItem newGame = new MenuItem("New Game F1");
MenuItem exit = new MenuItem("Exit F2");
exit.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.close();
}
});
menuGame.getItems().addAll(newGame,new SeparatorMenuItem(),exit);
menuBar.getMenus().addAll(menuGame);
Image image = new Image("http://docs.oracle.com/javafx/"
+ "javafx/images/javafx-documentation.png");
ImageView imageView = new ImageView();
imageView.setImage(image);
VBox vbox=new VBox();
StackPane root=new StackPane();
root.getChildren().addAll(imageView);
vbox.getChildren().addAll(menuBar,root);
Scene scene= new Scene(vbox,400,400);
primaryStage.setScene(scene);
primaryStage.setMaxHeight(800);
primaryStage.setMinHeight(400);
primaryStage.setMaxWidth(1000);
primaryStage.setMinWidth(800);
primaryStage.setTitle("Minesweeper");
primaryStage.show();
}
mögliche Duplikate von JavaFx image resizing
Keine seiner nicht dude
Mögliche Duplikate von die Größenanpassung der Bilder ein, passen Sie die übergeordneten Knoten
Keine seiner nicht dude
Mögliche Duplikate von die Größenanpassung der Bilder ein, passen Sie die übergeordneten Knoten
InformationsquelleAutor Tony | 2014-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auftragen der Lösung auf JavaFx ändern der Bildgröße zu deinem Beispiel-code und die Größe des Fensters Ergebnisse in unterschiedlichen Bild-Größen für mich.
Alternative Ansätze und zusätzliche Informationen basierend auf Kommentare
Die Lösung, die oben präsentiert ist nur eine Antwort, es gibt andere möglich. Der scene graph kann verwendet werden, durch die Bindung von verschiedenen Eigenschaften für die Breite und Höhe des übergeordneten Knotens oder durch überschreiben layoutChildren in die übergeordneten Knoten.
Verwandte Eigenschaften:
Bevorzuge ich die region Unterklasse Ansatz für die Eigenschaft "Skalierung" oder transform-basierten Ansatz, da dann das Bild automatisch die Größe basiert auf der layout-manager. Die ImageViewPane oben definiert ist nur eine einmalige definition der Klasse, die wiederverwendet werden können, wie viel Sie wollen, die eigentlichen Anwendungs-code zu verwenden, eine Bildansicht oder ImageViewPane ist so ziemlich gleichwertig.
Ein weiterer möglicher Ansatz ist die Verwendung eines Region-Unterklasse (z.B. eine Scheibe), die eine definierte CSS-Klasse oder id und dann zu definieren, die Bild in CSS als hintergrund. Die nette Sache über einen CSS-Bild definiert ist, dann können Sie zusätzliche CSS-basierte Attribute zu definieren, die Dinge, wie Größe, Skalierung, Positionierung und wiederholt für das Bild. Diese hintergrund auch programmgesteuert festgelegt wenn gewünscht, anstatt über CSS.
Verwandte Frage:
Zu pflegen proportional Höhe und Breite des Bildes
Kann der folgende code verwendet werden, in der ImageViewPane Klasse, sofern oben:
InformationsquelleAutor jewelsea
Verwenden Sie einfach einen normalen Bereich mit einem Hintergrundbild, hier die css benötigt.
InformationsquelleAutor Blu
Sind Sie auf der Suche nach ändern Sie die Größe eines tatsächlichen Bildes, oder nur die Mitte?
Können Sie versuchen, diese:
VBox.setVgrow(root, Priority.ALWAYS);
und sehen, ob das, was Sie wollen.Auch, seien Sie vorsichtig mit Bild, weil es eine
png
Bild. Ich bin ein bisschen skeptisch was verändert es (das eigentliche Bild oder den transparenten hintergrund).InformationsquelleAutor GGrec
Ich weiß, das ist alt, aber jemand wie ich kann stolpern das so, hier ist meine Lösung. Ich gehe davon aus, dass root ist der root-Knoten der Szene. Dies sollte jedoch funktionieren, wenn Ihre übergeordneten Knoten der Bildansicht ist jedes Kind der Bereich.
center
in den beiden unteren Zeilen?InformationsquelleAutor Andrew S