IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Insérer ImageView dans une TableView


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Par défaut Insérer ImageView dans une TableView
    Bonjour les amis,

    Je débute en Java FX et j'utilise Netbeans 7.2 avec Java FX Scene Builder.
    J'ai une TableView de 4 colonnes, dont 2 contiendront des logos que j'importerai à partir de fichiers existants (.jpg)

    Voici ma table :


    La première colonne (Objet TableColumn) contiendra les logos, elle est indexée par son id @FXML "logo1" que j'ai aussi déclaré dans ma classe java.

    J'aimerais donc savoir comment fait-on pour insérer des ImageView dans cette colonne.

    Je vous remercie par avance de vos réactions !

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2013
    Messages : 5

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    TableColumn<Whatever, Image> hostColumn = ...
    // Permet de récupérer l'image pour la colonne host pour la valeur whatever de la ligne courante.
    hostColumn.setCellValueFactory(new Callback<CellDataFeatures<Whatever, Image>, ObservableValue<Image>>() {
        public ObservableValue<Image> call(CellDataFeatures<Whatever, Image> p) {
             Whatever w = p.getValue();
             return w.imageProperty();
             // Ou si pas de propriété sous la main :
             //Image image = ...
             //return new SimpleObjectProperty<>(image);      
         }
    };
    // Affiche l'image dans la cellule de la table host pour la ligne courante.
    hostColumn.setCellFactory(new Callback<TableColumn<Whatever, Image>, TableCell<Whatever, Image>>(){
        public TableCell<Whatever, Image> call(TableColumn<Whatever, Image> p) {
            return new TableCell<>() {
                   public void updateItem(Image image, boolean empty) {
                      setText(null);
                      setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                      ImageView imageView = (image == null || empty) ? null :  ImageViewBuilder.create().image(image).build();
                      setGraphic(imageView);
                   }
            };
        }
    }):
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Par défaut Merci
    Merci Bouye !

    Je vais tester ça et je te tiens au courant ! Encore merci d'avoir pris du temps de me répondre

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    un petit exemple qui fonctionne avec des images... o combien sérieuses on va dire... hum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package test;
     
    import java.io.File;
    import java.io.FilenameFilter;
    import javafx.application.Application;
    import javafx.beans.property.SimpleObjectProperty;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.beans.value.ObservableValue;
    import javafx.scene.Scene;
    import javafx.scene.control.ContentDisplay;
    import javafx.scene.control.TableCell;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableColumn.CellDataFeatures;
    import javafx.scene.control.TableColumnBuilder;
    import javafx.scene.control.TableView;
    import javafx.scene.control.TableViewBuilder;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.image.ImageViewBuilder;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.util.Callback;
     
    /**
     *
     * @author fabriceb
     */
    public class Main extends Application {
     
        @Override
        public void start(Stage primaryStage) {
            TableColumn<File, Image> imageColumn = TableColumnBuilder.<File, Image>create().text("Image").build();
            imageColumn.setCellValueFactory(new Callback<CellDataFeatures<File, Image>, ObservableValue<Image>>() {
                @Override
                public ObservableValue<Image> call(CellDataFeatures<File, Image> p) {
                    File file = p.getValue();
                    return new SimpleObjectProperty<>(new Image(file.toURI().toString(), 100, 100, true, true, true));
                }
            });
            imageColumn.setCellFactory(new Callback<TableColumn<File, Image>, TableCell<File, Image>>(){
     
                @Override
                public TableCell<File, Image> call(TableColumn<File, Image> p) {
                    return new TableCell<File, Image>(){
     
                        @Override
                        protected void updateItem(Image i, boolean empty) {
                            super.updateItem(i, empty);
                            setText(null);
                            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                            ImageView imageView = (i == null || empty) ? null : ImageViewBuilder.create().image(i).build();
                            setGraphic(imageView);
                        }                    
                    };
                }
            });
            //
            TableColumn<File, String> pathColumn = TableColumnBuilder.<File, String>create().text("Path").build();
            pathColumn.setCellValueFactory(new Callback<CellDataFeatures<File, String>, ObservableValue<String>>() {
                @Override
                public ObservableValue<String> call(CellDataFeatures<File, String> p) {
                    File file = p.getValue();
                    return new SimpleStringProperty(file.getAbsolutePath());
                }
            });
            //
            TableView<File> tableView = TableViewBuilder.<File>create().columns(imageColumn, pathColumn).columnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY).build();
            //
            String path = "C:\\fabriceb\\Dessin";
            File folder = new File(path);
            File[] files = folder.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".png") || name.endsWith(".gif");
                }
            });
            if (files != null) {
                for (File file : files) {
                    tableView.getItems().add(file);
                }
            }
            //
            StackPane root = new StackPane();
            root.getChildren().add(tableView);
     
            Scene scene = new Scene(root, 500, 500);
     
            primaryStage.setTitle("Test TableView Image");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
     
        /**
         * The main() method is ignored in correctly deployed JavaFX 
         * application. main() serves only as fallback in case the 
         * application can not be launched through deployment artifacts,
         * e.g., in IDEs with limited FX support. NetBeans ignores main().
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
    }
    Nom : TableViewImage.png
Affichages : 2621
Taille : 121,6 Ko
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Par défaut Ajout de données dans ma TableView
    Merci beaucoup pour ton exemple Bouye.

    Maintenant j'aimerais connaitre une manière propre d'ajouter mes données à la TableView, sachant que j'utilise des variables FXML pour ma TableView et mes TableColumn.

    J'aimerais extraire une liste de String à partir d'un fichier que je chargerai par exemple dans ma première colonne (@FXML TableColumn hote).

    Peux-tu m'éclairer ?

    Merci encore

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Créer un contrôleur pour le FXML (donner des fx:id à la TableView et aux TableColumn pour pouvoir les récupérer depuis le contrôleur via l'annotation @FXML) et charger le fichier dans un Service (depuis le corps de l'app ou depuis le contrôleur).
    C'est le controleur qui mettre les cellValueFactory et les cellFactory sur les colonnes.

    Dans le nœud racine du FXML après xml:ns :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...] fx:controller="monpackage.MaClasseContrôleur">
    Dans les définitions de la table et des colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       <TableView fx:id="idDeMaTable" [...]
     
    [...]
     
       <TableColumn fx:id="idDeMaColonne1" [...]
    Dans la classe du contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package monpackage;
     
    public class MaClasseContrôleur implements Initializable {
      @FXML
      private TableView<Whatever> idDeMaTable; 
     
      @FXML
      private TableColumn<Whatever, String> idDeMaColonne1; 
     
      @override
      protected void initialize(URL url, ResourceBundle bd) {
        // Préparer les colonnes de la table ici (cellValueFactory, cellFactory).
      }
    }
    Dans le corps du programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
      Node monFXML = (Node)fxmlLoader.load();
      MaClasseContrôleur monContrôleur = (MaClasseContrôleur )fxmlLoader.getController(),
     
     
      [...]
     
    final Service<List<String>> loadServive = new Service() {
      @Override
       public Task<List<String>> createTask() {
         return new Task<List<String>>() {
           @Override
           protected List<String> call() {
             // Charger le fichier ici.
             List<String> result = ...
             return result;
           }
        };
      }
    };
    loadService.setOnSucceeded(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
           List<String> result = loadService.getValue();
           monContrôleur.setTableContent(result);
        }
      });
    loadService.start();
    C'est vite écrit donc ça doit être plein de fautes mais l'idée est là.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Insérer résultat dans une boite de dialogue.
    Par gmachi10 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 13/08/2008, 10h18
  2. insérer un % dans une TextBox
    Par vincenus33 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 19/03/2008, 10h07
  3. Insérer données dans une table
    Par latrik dans le forum Windows Forms
    Réponses: 0
    Dernier message: 13/09/2007, 17h00
  4. insérer un " dans une chaine de caractère
    Par Alisea dans le forum Langage
    Réponses: 4
    Dernier message: 28/07/2006, 17h05
  5. [xslt]insérer javascript dans une feuille
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 15/11/2005, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo