JavaFX --Match la taille d'ImageView avec d'autres nœuds

Un mémo quand j'ai eu du mal à répondre à un tel désir de rendre l'affichage de ʻImageView` plus grand ou plus petit lorsque la taille de la fenêtre a été modifiée. Puisqu'il est le résultat de divers essais et erreurs, l'exactitude ne peut être garantie.

Lorsqu'il est lié à Stage

La mise en oeuvre

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();
    }
}

** Résultat d'exécution **

javafx.gif

La description

height | Window (JavaFX 8)

Cette valeur inclut ** toutes les décorations telles que la barre de titre qui peuvent être ajoutées par le système d'exploitation **.

――Il semble donc que l'image soit probablement masquée par la hauteur de la barre de titre.

Faire correspondre l'itinéraire du graphique de la scène

La mise en oeuvre

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());
    }
}

** Résultat d'exécution **

javafx.gif

La description

Lien avec des nœuds autres que la racine

Lorsqu'un autre nœud entre

La méthode ci-dessus ne peut être réalisée qu'en tant que visionneuse d'images, car il n'y a pas d'autres nœuds dans le graphe de scène. À titre de test, ajoutez un autre nœud dans le graphique de la scène.

La mise en oeuvre

javafx.jpg

** Résultat d'exécution **

javafx.gif

La description

Pour le moment, essayez d'ajouter un nœud pour la zone d'affichage de l'image

La mise en oeuvre

javafx.jpg

** Résultat d'exécution **

javafx.gif

La description

――C'est un peu difficile à comprendre, mais l'image est affichée dans sa taille d'origine et seule la partie supérieure gauche est visible. ――Je ne comprends pas vraiment le principe pourquoi BorderPane est OK quand c'est le nœud racine et cela fonctionne comme ça quand c'est un nœud enfant.

Lien avec un nœud non racine

La mise en oeuvre

javafx.jpg

** Résultat d'exécution **

javafx.gif

La description

Résumé

--Commun --Définissez la «largeur» et la «hauteur» de la «scène»

Recommended Posts

JavaFX --Match la taille d'ImageView avec d'autres nœuds
Ajustez automatiquement la hauteur de la boîte de dialogue WebView avec la taille du contenu
Vérifiez le contenu des paramètres avec le levier
Présentation des fonctionnalités des conteneurs JavaFX Scene Builder
Mesurez facilement la taille des objets Java
À propos du traitement de BigDecimal (avec réflexion)
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Vérifiez le contenu de l'objet argument avec Mockito
Mesurer la taille d'un dossier avec Java
Gérez la version de Ruby elle-même avec rbenv
Écraser le contenu de la configuration avec Spring-boot + JUnit5
L'histoire du réglage de l'application Android avec libGDX
Calculer le score de similarité des chaînes de caractères avec JAVA
Préparez l'environnement CentOS 8 avec Sakura VPS
Spécifiez la valeur par défaut avec @Builder of Lombok
Mesurez la distance du labyrinthe avec la recherche de priorité de largeur
J'ai vérifié le nombre de taxis avec Ruby
[Note personnelle] Disposition des boutons créés avec javafx d'Eclipse (dans le cas de HBox / VBox)