JavaFX - Passen Sie die Größe von ImageView an andere Knoten an

Ein Memo, als ich mich bemühte, einen solchen Wunsch zu erfüllen, die Anzeige von "ImageView" zu vergrößern oder zu verkleinern, wenn die Fenstergröße geändert wurde. Da es das Ergebnis verschiedener Versuche und Irrtümer ist, kann die Richtigkeit nicht garantiert werden.

Wenn mit Stage verbunden

Implementierung

main.fxml


<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane fx:controller="sample.javafx.MainController" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <ImageView fx:id="imageView" fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>

javafx.jpg

MainController.java


package sample.javafx;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

import java.net.URL;
import java.nio.file.Paths;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    private ImageView imageView;

    public void initStage(Stage stage) {
        stage.setWidth(300);
        stage.setHeight(200);
        
        imageView.fitWidthProperty().bind(stage.widthProperty());
        imageView.fitHeightProperty().bind(stage.heightProperty());
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        Image image = new Image(Paths.get("./image/shirakawago.jpg ").toUri().toString());
        imageView.setImage(image);
    }
}

Main.java


package sample.javafx;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/main.fxml"));

        Parent root = loader.load();

        MainController controller = loader.getController();
        controller.initStage(primaryStage);

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

** Ausführungsergebnis **

javafx.gif

Erläuterung

--Binden Sie die Eigenschaften "fitWidth" und "fitHeight" von "ImageView" an die Eigenschaften "width" und "height" von "Stage" --Beachten Sie, dass Sie die Werte für "Breite" und "Höhe" von "Bühne" im Voraus festlegen müssen.

height | Window (JavaFX 8)

Dieser Wert enthält ** alle Dekorationen wie die Titelleiste, die vom Betriebssystem hinzugefügt werden können **.

――So scheint das Bild wahrscheinlich durch die Höhe der Titelleiste verborgen zu sein.

Passen Sie die Route des Szenendiagramms an

Implementierung

javafx.jpg

MainController.java


package sample.javafx;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

import java.net.URL;
import java.nio.file.Paths;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    private BorderPane borderPane;
    @FXML
    private ImageView imageView;
    
    public void initStage(Stage stage) {
        stage.setWidth(300);
        stage.setHeight(200);
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        Image image = new Image(Paths.get("./image/shirakawago.jpg ").toUri().toString());
        imageView.setImage(image);
        
        imageView.fitWidthProperty().bind(borderPane.widthProperty());
        imageView.fitHeightProperty().bind(borderPane.heightProperty());
    }
}

** Ausführungsergebnis **

javafx.gif

Erläuterung

--Binden Sie die Eigenschaft "width", "height" von "BorderPane", die die Wurzel des Szenendiagramms darstellt, und die Eigenschaft "fitWidth", "fitHeight" von "ImageView".

Verknüpfung mit anderen Knoten als der Wurzel

Wenn ein anderer Knoten hereinkommt

Das obige Verfahren kann nur als sogenannter Bildbetrachter realisiert werden, da das Szenendiagramm keine anderen Knoten enthält. Fügen Sie als Test einen weiteren Knoten in das Szenendiagramm ein.

Implementierung

javafx.jpg

** Ausführungsergebnis **

javafx.gif

Erläuterung

Versuchen Sie vorerst, einen Knoten für den Bildanzeigebereich hinzuzufügen

Implementierung

javafx.jpg

** Ausführungsergebnis **

javafx.gif

Erläuterung

――Es ist etwas verwirrend, aber das Bild wird in der Originalgröße angezeigt und nur der obere linke Teil ist sichtbar. ――Ich verstehe das Prinzip nicht wirklich, warum "BorderPane" in Ordnung ist, wenn es sich um den Stammknoten handelt, und es funktioniert so, wenn es sich um einen untergeordneten Knoten handelt.

Verknüpfung mit Nicht-Root-Knoten

Implementierung

javafx.jpg

** Ausführungsergebnis **

javafx.gif

Erläuterung

--Stellen Sie "Min Width" und "Min Height" auf "0"

Zusammenfassung

--Verbreitet --Stellen Sie "Breite" und "Höhe" von "Bühne" ein --Binden Sie die Eigenschaften fitWidth, fitHeight von ImageView an die Eigenschaften width, height des Knotens, mit dem Sie arbeiten möchten. --Wenn der zu verknüpfende Knoten nicht der Stammknoten ist --Stellen Sie die "Min Width", "Min Height" des Knotens auf einen anderen Wert als "USE_COMPUTED_SIZE", "USE_PREF_SIZSE" ein

Recommended Posts

JavaFX - Passen Sie die Größe von ImageView an andere Knoten an
Passen Sie die Höhe des WebView-Dialogfelds automatisch an die Größe des Inhalts an
Überprüfen Sie den Inhalt der Parameter mit pry
Einführung in die Funktionen von JavaFX Scene Builder-Containern
Messen Sie einfach die Größe von Java-Objekten
Über die Behandlung von BigDecimal (mit Reflexion)
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito
Messen Sie die Größe eines Ordners mit Java
Verwalten Sie die Version von Ruby selbst mit rbenv
Überschreiben Sie den Inhalt der Konfiguration mit Spring-boot + JUnit5
Die Geschichte der Optimierung der Android-App mit libGDX
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Bereiten Sie die CentOS 8-Umgebung mit Sakura VPS vor
Geben Sie den Standardwert mit @Builder of Lombok an
Messen Sie den Abstand des Labyrinths mit der Suche nach Breitenpriorität
Ich habe die Anzahl der Taxis mit Ruby überprüft
[Persönliches Memorandum] Anordnung der mit javafx von Eclipse erstellten Schaltflächen (im Fall von HBox / VBox)