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

Composants Java Discussion :

Jtable changer la taille des colonnes


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut Jtable changer la taille des colonnes
    Bonjour ,

    J'ai plusieurs questions au sujet de netbeans.
    En gros mon logiciel est un logiciel de rapport ou je peux rentrer la date, nom, et le rapport est qui est ensuite enregistré dans MySQL et affiché sur un JTable.

    1/Tout d'abord je voulais savoir comment je peux incrémenter une date automatiquement lorsque la personne rentre son rapport, au lieu qu'il rentre la date lui même.

    2/ Je voulais aussi savoir comment je peux changer les tailles des colonnes, j'aimerai reduire la colonne "date" et "nom" et augmenter la taille de la colonne "rapport" (texte beaucoup plus long).

    3/ j'aimerai aussi savoir si c'est possible que si le texte est trop long qui revienne à la ligne automatique sur un JTable est aussi sur JtextField.

    Merci pour votre aide

    Julien

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par juliendu67117 Voir le message
    1/Tout d'abord je voulais savoir comment je peux incrémenter une date automatiquement lorsque la personne rentre son rapport, au lieu qu'il rentre la date lui même.
    Incrémenter une date automatiquement, c'est-à-dire ? Prendre le jour suivant ?

    Pour le jour suivant, avec un java.time.LocalDate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date = date.plusDays(1);
    Sinon, pour la date du jour, ce qui me semble plus adapter pour dater un rapport qu'on saisi : date = LocalDate.now();A noter qu'un composant calendrier comme le JDateChooser de Toedter permet de saisir facilement une date.


    Citation Envoyé par juliendu67117 Voir le message
    2/ Je voulais aussi savoir comment je peux changer les tailles des colonnes, j'aimerai reduire la colonne "date" et "nom" et augmenter la taille de la colonne "rapport" (texte beaucoup plus long).
    On peut affecter la taille d'une colonne :
    1. par l'emploi de méthodes setPreferedWitdh(), setMaxWidth() et setMinWidth() sur le modèle de colonne (instance de classe TableColumn), qu'on obtient par table.getColumnModel().getColumn(indexDeColonne), ce qui permet en quelque sorte de paramétrer les modes de dimensionnement automatique
    2. on peut forcer la taille (en désactivant le dimensionnement automatique) avec la méthode setWidth(), sur la même classe.


    Citation Envoyé par juliendu67117 Voir le message
    3/ j'aimerai aussi savoir si c'est possible que si le texte est trop long qui revienne à la ligne automatique sur un JTable est aussi sur JtextField.
    Pour le JTextField, non. Il faut utiliser un JTextArea à la place.
    Pour le renvoi à la ligne dans la JTable, c'est un peu plus complexe : il faut écrire un TableCellRenderer déjà, dédié, et, éventuellement, un TableCellEditor. On pourrait utiliser l'astuce du html dans un label, mais ça oblige à gérer les styles. Mais il faut gérer de toute manière la hauteur de ligne soi-même (table.setRowHeight(index, hauteur);) et le calcul de la hauteur n'est pas simple en lui-même, mais encore moins si on veut gérer des tris ou des filtres.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    [Bonjours

    merci pour ta réponse.
    Enfaite j'aimerai que lorsqu'une personne valide le rapport il y a une date avec l'heure de la validation qui s'affiche dans le Jtable.

    Pour changer la taille des colonnes, je n'arrive pas à modifier le programme de la jtable elle est grisé.

    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
         tbl_rapport_elec.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null, null, null},
                    {null, null, null, null, null},
                    {null, null, null, null, null},
                    {null, null, null, null, null},
                    {null, null, null, null, null}
                },
                new String [] {
                    "id", "Date", "Nom", "Poste", "Rapport"
                }
            ) {
                Class[] types = new Class [] {
                    java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
                };
                boolean[] canEdit = new boolean [] {
                    false, false, false, false, false
                };
     
                public Class getColumnClass(int columnIndex) {
                    return types [columnIndex];
                }
     
                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return canEdit [columnIndex];
                }
            });

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par juliendu67117 Voir le message
    Enfaite j'aimerai que lorsqu'une personne valide le rapport il y a une date avec l'heure de la validation qui s'affiche dans le Jtable.
    Pour avoir la date et l'heure au moment de la validation :

    • avec java.time : LocalDateTime date = LocalDateTime.now();,
    • ou avec java.util.date Date date = new Date();

    En revanche, pour l'afficher proprement dans la JTable, il faudra la formater (voir DateTimeFormatter pour java.time.LocalDateTime, .ou SimpleDateFormat pour java.util.Date.
    En amont, en stockant la String résultat dans la JTable (mais ça peut te poser différents problèmes, par exemple si tu veux trier par date, ou te servir des données du modèle de la JTable comme source pour le stockage en base. Sinon, il faut utiliser un TableCellRenderer dédié.

    Par exemple, avec java.time.LocalDateTime :

    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
    		TableCellRenderer localDateTimeTableCellRenderer = new DefaultTableCellRenderer() {
     
    		    final DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy"); // ici le format que tu veux pour l'affichage
     
    		    public Component getTableCellRendererComponent(JTable table,
    		            Object value, boolean isSelected, boolean hasFocus,
    		            int row, int column) {
    		        if( value instanceof LocalDateTime) {
    		            value = format.format((LocalDateTime)value);
    		        }
    		        return super.getTableCellRendererComponent(table, value, isSelected,
    		                hasFocus, row, column);
    		    }
    		};
     
    table.setDefaultRenderer(LocalDateTime.class, localDateTimeTableCellRenderer);
     
    // ou si tu veux l'affecter à une colonne en particulier : table.getColumnModel().getColumn(indexDeLaColonne).setCellRenderer(localDateTimeTableCellRenderer);

    et avec java.util.Date
    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
    TableCellRenderer dateTableCellRenderer = new DefaultTableCellRenderer() {
     
        final SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); // ici le format que tu veux pour l'affichage
     
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
            if( value instanceof Date) {
                value = format.format(value);
            }
            return super.getTableCellRendererComponent(table, value, isSelected,
                    hasFocus, row, column);
        }
    };
    table.setDefaultRenderer(Date.class, dateTableCellRenderer);
     
    // ou si tu veux l'affecter à une colonne en particulier : table.getColumnModel().getColumn(indexDeLaColonne).setCellRenderer(dateTableCellRenderer);




    Citation Envoyé par juliendu67117 Voir le message
    Pour changer la taille des colonnes, je n'arrive pas à modifier le programme de la jtable elle est grisé.
    Sous NetBeans, si tu as fait ton interface avec la palette, tu ne peux pas modifier le .java généré directement. Il faut passer par le menu contextuel (bouton droit), tu as une option "Customize code", qui te permet de modifier les méthodes créées par la palette de NetBeans. Voir exemple dans ce message.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Merci pour ta réponse

    Pour ajuster la taille des colonnes j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbl_rapport_elec.getColumnModel().getColumn(date).setPreferredWidth(10);
    Mais il me souligne le mot date alors que c'est le nom de la colonnes

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Le paramètre à passer, ce n'est pas le nom de la colonne, mais l'index (un numéro, 0 <= index < nombre de colonnes). Quand bien même ce serait le nom, il faudrait qu'il soit indiqué entre guillement, parce que c'est une chaîne de caractères ! D'ailleurs tu peux obtenir l'index d'une colonne à partir de son nom : table.getColumnModel().getColumnIndex("date"), si "date" est le nom d'une colonne (le nom, c'est le titre).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Désolé pour toutes c'est question mais je suis débutant en JAVA

    J'ai essayer de mettre 1 à la place de "date" mais j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
    Voici ce que j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbl_rapport_elec.getColumnModel().getColumn(1).setPreferredWidth(10);
    Si j'essaye de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumnIndex("date").setPreferredWidth(10);
    j'ai toute la ligne qui est souligné en rouge

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par juliendu67117 Voir le message
    J'ai essayer de mettre 1 à la place de "date" mais j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
    Ça dit qu'il y a 0 colonnes dans la table, donc que tu ne peux pas accèder à la colonne d'index 1.

    • Soit il n'y a pas de colonnes
    • Soit le code généré par NetBeans procède en 2 temps : création d'une JTable vide, puis affectation d'un model (table.setModel(...). Dans ce cas, il faut modifier la taille après l'affectation du modèle, parce que avant, la colonne n'existe pas encore.
    • Soit le code généré par NetBeans désactive la génération automatique de colonnes (cherche si tu vois setAutoCreateColumnsFromModel(false)). Dans ce cas, il y a du code particulier à un endroit pour générer les colonnes, et il faut changer la taille après.

    (Je n'utilise pas NetBeans, et encore moins les éditeurs d'UI, donc je ne connais pas le code généré.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbl_rapport_elec.getColumnModel().getColumn(1).setPreferredWidth(10);
    Citation Envoyé par juliendu67117 Voir le message
    Si j'essaye de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumnIndex("date").setPreferredWidth(10);
    j'ai toute la ligne qui est souligné en rouge
    Bah, là, c'est normal : table.getColumnModel().getColumnIndex("date") retourne l'index de la colonne date, donc un int !!! Il n'y a pas de méthode setPreferredWitdh sur un int (il n'y a même aucune méthode). En plus, ta variable s'appelle tbl_rapport_elec, pas table.

    Le code si tu veux passer par le nom c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbl_rapport_elec.getColumnModel().getColumn( tbl_rapport_elec.getColumnModel().getColumnIndex("date") ).setPreferredWidth(10);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Encore merci pour ton aide

    Du coup je l'ai mis vers la fin du code JTABLE et j'ai plus l'erreur par contre la taille des colonnes ne bouge pas, je pense qu'il y autre quelque chose qui est prioritaire sur la taille des colonnes nn ?
    Oui je vois un autoCreateRowSorter qui est activé si je le desactive j'ai de nouveau ce message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
    Voila le code de la Jtable

    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
    tbl_rapport_elec = new javax.swing.JTable();
     
    tbl_rapport_elec.setAutoCreateRowSorter(true);
     
    tbl_rapport_elec.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null},
            {null, null, null, null, null},
            {null, null, null, null, null},
            {null, null, null, null, null},
            {null, null, null, null, null}
        },
        new String [] {
            "id", "Date", "Nom", "Poste", "Rapport"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
        };
        boolean[] canEdit = new boolean [] {
            false, false, false, false, false
        };
     
        public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }
     
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    tbl_rapport_elec.getColumnModel().getColumn(1).setPreferredWidth(10);
    jScrollPane1.setViewportView(tbl_rapport_elec);

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Comme je te l'ai déjà dit, la taille des colonnes est gérée d'abord selon un mode : par défaut, ce mode est AUTO_RESIZE_SUBSEQUENT_COLUMNS, ce qui signifie que les colonnes se répartissent dans la largeur de la table, et que lorsque l'utilisateur redimensionne une colonne, les colonnes suivantes vont se répartir l'espace restant à droite.
    Ensuite, les méthodes setPreferredWidth, setMaxWidth, setMinWidth permettent de paramètrer la largeur par défaut d'une colonne, et les possibilités de modification de la largeur par l'utilisateur.
    setPreferredWidth est la taille préférentielle : c'est la taille que va essayer d'obtenir le système de dimensionnement. Mais si cette taille est trop petite par rapport aux autres colonnes, la taille obtenue finalement sera plus grande.
    Si tu fais .setMaxWidth(10);, tu vas dire que la colonne ne peut pas faire plus de 10 pixels de largeur. Dans ce cas, le mode AUTO_RESIZE_SUBSEQUENT_COLUMNS va respecter cette taille maximum.

    Note bien que 10 pixels c'est très étroit sur la plupart des résolutions couramment utilisées aujourd'hui, surtout si c'est pour afficher une date. Sur un écran de 1000 pixels de largeur, c'est 100ème de la largeur de l'écran !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Désoler mais j'ai un peu du mal :/

    Du coup j'ai essayé de désactivé le mode AUTO_RESIZE_SUBSEQUENT_COLUMN, les colonnes ne prennent plus toutes la taille du JTable mais ils ne prennent pas en compte mes modifications de taille de colonnes
    Mon tableau fait 1420 pixel j'ai mis environs 100 pixels pour la première colonnes et 200 pour les suivantes j'en ai 5

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Est-ce que j'ai écrit qu'il fallait désactiver le mode AUTO_RESIZE_SUBSEQUENT_COLUMN ?

    Si tu veux que ta colonne fasse exactement 100 pixels de large, quelque soit les autres (leur nombre et leur largeur), tu lui donne un minWidth de 100 et un maxWidth de 100. Ainsi, elle ne pourra pas être plus petite que 100 et plus grande que 100, donc elle fera 100. En revanche, si la table fait 500 de large, et qu'il y a 3 colonnes, les deux autres colonnes devront se répartir les 400 pixels restant (selon leurs propres paramètres).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    C'est ce que j'avais essayé j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tbl_rapport_elec.getColumnModel().getColumn(1).setMinWidth(50);
    tbl_rapport_elec.getColumnModel().getColumn(1).setMaxWidth(50);
    Mais ça fonctionne toujours pas

    Mais ça fonctionnait pas, donc j'ai regardé sur des forums et j'ai vu des personnes qui demander d'enlever le mode AUTO_RESIZE_SUBSEQUENT_COLUMN
    C'est pour ça que j'ai voulu essayé mais ça na pas fonctionné.

    désolé et merci pour ton aide

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    C'est à dire ça marche pas ? Tu as mesuré la largeur de la colonne et elle fait combien ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    les 5 colonnes sont identique elles fonts 284 Pixels chacune

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Il doit y avoir un traitement quelque part qui fait que ça fait ça (un changement du mode de redimensionnement peut-être, ou un code qui force la largeur des colonnes), parce que si je reprends ton code tel quel, cela fonctionne.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Oui c'est ce que je pensais mais j'arrive pas à trouver ce qu'il pourrait me forcer la taille des colonnes.
    Je vais essayer de me renseigner.

    En tout cas merci pour ton aide

  18. #18
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Bonjour

    En cherchant un peux j'ai compris pourquoi je n'arrivais pas à changer la taille des colonnes

    Voici un morceau de code d'un JFrame

    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
    public class Rapport_electricien extends javax.swing.JFrame {
     
        Statement stmt;
        Statement stmtListeRapportelec;
        BaseDD maConnexion2 ;
        ResultSet rs;
     
     
        public Rapport_electricien() {
     
     
           maConnexion2 = new BaseDD(new Parameter().HOST_DB, new Parameter().USERNAME_DB, new Parameter().PASSWORD_DB, new Parameter().IPHOST, new Parameter().PORT);
            initComponents();
            table();
         }
         public void table() {
            String t[] = {"id","date","nom","poste","rapport"};
            rs = maConnexion2.querySelect(t, "rapport_elec");
            tbl_rapport_elec.setModel(new ResultSetTableModel(rs));
        }
         void actualiser() {
            txt_date.setText("");
            txt_nom.setText("");
            txt_poste.setText("");
            txt_rapport.setText("");
         }
    Lorsque je m'ai en commentaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau_consigne.setModel(new ResultSetTableModel(rs));
    J'arrive à modifier la taille des colonnes, m'ai j'ai plus les valeurs de ma base de donnée dans mon Jtable

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ah, oui, changer le modèle regènère tout ce qui dépend du modèle, donc les modèles de colonnes, à fortiori.

    Ce que tu peux faire, c'est exécuter le code qui affecte les maxwidth/minwidth juste après le tbl_rapport_elec.setModel(new ResultSetTableModel(rs));, soit utiliser un écouteur (à mettre juste après la création de la JTable, là où tu mettais déjà les setMaxWidth/setMinWidth, ce qui évite de polluer le code de traitement de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    tbl_rapport_elec.addPropertyChangeListener("model",new PropertyChangeListener() {
     
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            TableColumnModel columnmodel = tbl_rapport_elec.getColumnModel();
                for(Enumeration<TableColumn> columns = columnmodel.getColumns(); columns.hasMoreElements(); ) {
                    TableColumn column = columns.nextElement();
                    column.setMinWidth(50);
                    column.setMaxWidth(50);
                }
         }
    });
    Attention, en revanche, tout ce que tu configures dans ton modèle initialement (avec tbl_rapport_elec.setModel(new javax.swing.table.DefaultTableModel()...) est perdu aussi, remplacé par la configuration du ResultSetTableModel.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Membre confirmé
    Homme Profil pro
    automaticien
    Inscrit en
    Novembre 2016
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : automaticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 68
    Par défaut
    Merci pour ta réponse

    Mais je vois pas ou je dois mettre le code que vous m'avez envoyé ?

    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
    108
    109
     
     
    public class Rapport_electricien extends javax.swing.JFrame {
     
        Statement stmt;
        Statement stmtListeRapportelec;
        BaseDD maConnexion2 ;
        ResultSet rs;
     
     
        public Rapport_electricien() {
     
          initComponents();
           maConnexion2 = new BaseDD(new Parameter().HOST_DB, new Parameter().USERNAME_DB, new Parameter().PASSWORD_DB, new Parameter().IPHOST, new Parameter().PORT);
     
            table();
         }
          public void table() {
            String t[] = {"id","date","nom","poste","rapport"};
            rs = maConnexion2.querySelect(t, "rapport_elec");
            tbl_rapport_elec.setModel(new ResultSetTableModel(rs));
     
        }
         void actualiser() {
            txt_date.setText("");
            txt_nom.setText("");
            txt_poste.setText("");
            txt_rapport.setText("");
         }
     
     tbl_rapport_elec.addPropertyChangeListener("model",new PropertyChangeListener() {
     
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            TableColumnModel columnmodel = tbl_rapport_elec.getColumnModel();
                for(Enumeration<TableColumn> columns = columnmodel.getColumns(); columns.hasMoreElements(); ) {
                    TableColumn column = columns.nextElement();
                    column.setMinWidth(50);
                    column.setMaxWidth(50);
                }
         } 
    } ) ;
     
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jLabel1 = new javax.swing.JLabel();
            jScrollPane1 = new javax.swing.JScrollPane();
            tbl_rapport_elec = new javax.swing.JTable();
            jPanel1 = new javax.swing.JPanel();
            jLabel2 = new javax.swing.JLabel();
            txt_date = new javax.swing.JTextField();
            jLabel3 = new javax.swing.JLabel();
            txt_nom = new javax.swing.JTextField();
            jLabel7 = new javax.swing.JLabel();
            txt_poste = new javax.swing.JTextField();
            jLabel8 = new javax.swing.JLabel();
            bt_ajouter = new javax.swing.JButton();
            modifjButton3 = new javax.swing.JButton();
            jScrollPane2 = new javax.swing.JScrollPane();
            txt_rapport = new javax.swing.JTextArea();
            jPanel2 = new javax.swing.JPanel();
            jLabel9 = new javax.swing.JLabel();
            comrech = new javax.swing.JComboBox<>();
            txtrech = new javax.swing.JTextField();
            recherchejButton4 = new javax.swing.JButton();
            actualiserjButton4 = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
     
            jLabel1.setFont(new java.awt.Font("Tahoma", 3, 36)); // NOI18N
            jLabel1.setForeground(new java.awt.Color(51, 153, 255));
            jLabel1.setText("Rapport electricien");
     
            tbl_rapport_elec.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null, null, null},
                    {null, null, null, null, null},
                    {null, null, null, null, null},
                    {null, null, null, null, null},
                    {null, null, null, null, null}
                },
                new String [] {
                    "id", "Date", "Nom", "Poste", "Rapport"
                }
            ) {
                Class[] types = new Class [] {
                    java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
                };
     
                public Class getColumnClass(int columnIndex) {
                    return types [columnIndex];
                }
            });
            tbl_rapport_elec.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
            tbl_rapport_elec.setColumnSelectionAllowed(true);
            tbl_rapport_elec.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
            jScrollPane1.setViewportView(tbl_rapport_elec);
            tbl_rapport_elec.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
            if (tbl_rapport_elec.getColumnModel().getColumnCount() > 0) {
                tbl_rapport_elec.getColumnModel().getColumn(0).setPreferredWidth(50);
                tbl_rapport_elec.getColumnModel().getColumn(1).setPreferredWidth(100);
                tbl_rapport_elec.getColumnModel().getColumn(2).setPreferredWidth(100);
                tbl_rapport_elec.getColumnModel().getColumn(3).setPreferredWidth(100);
                tbl_rapport_elec.getColumnModel().getColumn(4).setPreferredWidth(500);
            }
            tbl_rapport_elec.repaint();
    J'ai essayé de le mettre mais il me souligne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     tbl_rapport_elec.addPropertyChangeListener("model",new PropertyChangeListener() {
     
        @Override
        public void propertyChange(PropertyChangeEvent evt) {

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/03/2010, 16h03
  2. [JTable]Comment changer le nom des colonnes
    Par Core8 dans le forum Composants
    Réponses: 8
    Dernier message: 28/10/2009, 01h13
  3. [Swing][JTable]Tailles des colonnes du tableau
    Par LordBlaize dans le forum Composants
    Réponses: 6
    Dernier message: 20/02/2006, 17h46
  4. [JTable] Changer la taille des colonnes
    Par lilou77 dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 10h26
  5. [JTable] redimensionner et changer le titre des colonnes
    Par Ghost Dog dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 19/04/2005, 20h31

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