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 :

Griser des lignes et des colonnes sur une JTable


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Griser des lignes et des colonnes sur une JTable
    Bonjour!

    Alors j'ai un petit problème avec une jTable! En effet, j'aimerais pouvoir griser toute la première colonne et toute la première ligne de ma JTable. Je sais qu'il faut créer une classe héritant de TableCellRenderer mais j'ai vraiment du mal à voir comment tout marche et les tutos sur le net sont assez flous.

    Voici le code que j'ai pour l'instant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void actionPerformed(java.awt.event.ActionEvent e) {
    	int t= (s.getTailleMemoire()/64)+2;
    	int val=0;
    	modele=new VueMemModele(t);
    	jTable.setModel(modele);
    	modele.setValueAt("   ",0,0);
    	for(int i=1;i<t;i++){
    		modele.setValueAt(val, i, 0);
    		val=val+64;
    	}
    	//modifie la largeur de la première colonne
    	TableColumn c = jTable.getColumnModel().getColumn(jTable.convertColumnIndexToView(0));
    	c.setResizable(false);
    	c.setMinWidth(30);
    VueMemModele est bien entendu un extend de AbstractTable model et j'ai mis par défaut le nombre de colonnes à 64 du coup je lui donne pas de String header[] dans le constructeur vu que je vais pas m'en servir (j'utilise pas de JscrollPanel et du coup il faudrait que j'ajoute manuellement les headers et ce serait bordellique ^^)

    Du coup, je supose que je dois faire un truc de ce style (code trouvé sur internet):

    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
    public class MyTCRenderer 
        extends JLabel
        implements TableCellRenderer {
     
        public Component getTableCellRendererComponent(
            JTable table, Object value,
            boolean isSelected, boolean hasFocus,
            int row, int column) {
     
            if (value.equals("disable me")) {
                setEnabled(false);
            }
            else
                setEnabled(true);
     
            setText((String)value);
            // other stuff...
        }
    }
    Seulement je vois pas trop comment appliquer cela à ma colonne "c" ni si c'est juste.

    Merci d'avance pour les aides éventuelles!

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    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
    public class MyTCRenderer 
        extends JLabel
        implements TableCellRenderer {
     
        public Component getTableCellRendererComponent(
            JTable table, Object value,
            boolean isSelected, boolean hasFocus,
            int row, int column) {
     
            // Convertir éventuellement les numéros de ligne et de colonne si ce sont la première ligne/colonne du modèle ou de la vue qui doit être grisé.
            setEnabled(!"disable me".equals(value) && row != 0 || column != 0);
     
            setText((String)value);
            // other stuff...
        }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    En fait c'est bien toute la row 0 et toute la colonne 0 que je veux griser.

    Sinon comment je peux faire pour affecter cette classe à la TableColumn c?

    En tout cas merci pour la réponse rapide!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Oki résolu! donc récapitulatif pour la postérité xD
    voici la classe coleur qu'il faut déclarer.

    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
     
    public class Couleur extends DefaultTableCellRenderer {
     
    	public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
    		Component cell = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
     
    //Forcer la couleur blanche sur la première ligne et la première colone.
    		for (int i=0;i<65;i++){
    			if (row == 0 && column == i) {
     
    			cell.setBackground(Color.white);
    			setEnabled(false);
    			}
    			if (row == i && column == 0) {
     
    				cell.setBackground(Color.white);
    				setEnabled(false);
    			}
    		}
     
    		return cell;
    Pour attribuer cela à mon Jtab, il faut utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jTable.setDefaultRenderer(Object.class, new Couleur());
    Merci pour la réponse!

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pense au bouton "Résolu"

    Sinon fait bien la distinction entre les colonnes de table (la vue) et celle de ton modèle. Les colonnes d'une table peuvent être déplacés.

    Si tu veux appliquer cela uniquement à ta colonne essaye plutôt javax.swing.table.TableColumn.setCellRenderer(javax.swing.table.TableCellRenderer)
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Dans le cas présent je ne fais que de la représentation d'une mémoire du coup ce n'est pas dans mon intérêt que l'on puisse bouger les colonnes mais c'est vrai que selon le cas, ça peut être utile. Je l'utiliserait pour ma column 0 du coup ^^.

    Merci encore.


    Edit: D'ailleurs, je pensais que le fait de mettre setEnabled(false) allait me permettre d'afficher les cellules en question comme celles du Header de la table mais ça m'a juste grisé un petit peu le texte qu'il y a dedans donc si quelqu'un cherche à faire ça, ce n'est pas la solution ^^

    D'un autre coté ça m'a permis de comprendre l'utilisation du tableCellRenderer donc je me plains pas

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Si tu veux un rendu similaire au Header utilise le HeaderRenderer
    Sinon utilise des boutons ;-)

    Ce qui est important avec les renderer c'est que ce ne sont que des "images", ils utilisent normalement toujours le même composant pour toutes les cellules dont les méthodes sont optimisées pour cette utilisation.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Ah en effet, ça marche beaucoup mieux comme ça!
    Re merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression de colonne sur une JTable
    Par AnjouWeb dans le forum Composants
    Réponses: 3
    Dernier message: 08/06/2016, 16h01
  2. Réponses: 2
    Dernier message: 21/10/2014, 14h12
  3. Réponses: 3
    Dernier message: 30/01/2012, 13h42
  4. Réponses: 8
    Dernier message: 29/04/2008, 13h58
  5. Traitement des lignes [suppression des lignes vides]
    Par turbo_chess dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2007, 09h16

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