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 :

Centrer les éléments d'une JTable et changer la couleur des cases


Sujet :

Composants Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Centrer les éléments d'une JTable et changer la couleur des cases
    Bonjour,

    est-il possible de centrer les éléments contenues dans chaque case d'une JTable?
    Si oui comment faire ?

    Autre question :
    Est-il possible de donner une couleur aux cases ?

    Merci

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    tout a fait possible, il faut redéfinir les cellRenderers de ta table.

    pour les couleurs tu peux te tourner vers la JXTable de swingx qui permet d'avoir des highlighters (et donc des couleurs de fond).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MyTableCellRenderer extends JLabel implements TableCellRenderer {
     
        /** Creates a new instance of MyTableCellRenderer */
        public TableHorCellRenderer() {
            this.setOpaque(true);
        }
    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
     public Component getTableCellRendererComponent(JTable table, Object value,
                              boolean isSelected, boolean hasFocus, int row, int column) {
     
            int column_ = table.convertColumnIndexToModel(column);
            if (column_ < 3) {
                super.setBackground(Color.WHITE);
            } else if (column_ > 2 && column_ < 6) {
                super.setBackground(Main.tempColor);
            } else if (column_ > 5 && column_ < 12) {
                super.setBackground(Main.precipColor);
            } else if (column_ > 11 && column_ < 14) {
                super.setBackground(Main.humidColor);
            } else if (column_ > 13 && column_ < 19) {
                super.setBackground(Main.windColor);
            } else if (column_ > 18 && column_ < 23) {
                super.setBackground(Main.tempColor);
            } else if (column_ > 22) {
                super.setBackground(Main.insolColor);
            } 
     
            this.setHorizontalAlignment(SwingConstants.RIGHT);
            this.setFont(table.getFont());
            setValue(value); 
    	return this;
        }
    un chti exemple si ca peut t'etre utile
    /!\ plus de gestion de focus ni de selection ici si tu veux les conserver recupere le code correspondant dans le DefaultCellRenderer de swing

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Bonjour,

    J'utilise le bout de code suivant pour l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    MyTableModel maTable = new MyTableModel(titres);		
    		JTable jTable = new JTable(maTable);
     
    	 ((MyTableModel)jTable.getModel()).remplie(donnees);
     
    	 TabCellRenderer renderer = new TabCellRenderer();
       jTable.setDefaultRenderer(Object.class, renderer);
     
    	  JScrollPane scroll = new JScrollPane(jTable,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    	  JPanel panel = new JPanel();
    	  panel.setPreferredSize(new Dimension(200, 100));
      	panel.setLayout(new BorderLayout());
        panel.add(new JScrollPane(scroll), BorderLayout.CENTER);
    La classe TabCellRenderer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import javax.swing.table.DefaultTableCellRenderer;
     
    public class TabCellRenderer extends DefaultTableCellRenderer {
    	private static final long serialVersionUID = 1L;
    	public TabCellRenderer() {
    		setHorizontalAlignment(CENTER);
    		setVerticalAlignment(CENTER);
    	}
    }
    La classe MyTableModel :
    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
    import javax.swing.table.AbstractTableModel;
     
    import java.util.List;
    import java.util.ArrayList;
     
    public class MyTableModel extends AbstractTableModel{
    	private static final long serialVersionUID = 1L;
     
    	String[] colonnes;// = {"PERSONNE", "EQUIPE", "OUVERT","FERME", "OUVERT & FERME", "EN_COURS"};
    	//la liste du contenu du tableau 
    	private List<Object[]> allLignes = new ArrayList<Object[]>();
     
    	//constructeur vide 
    	public MyTableModel(String[] colonnes){
    		this.colonnes = colonnes;
    	}
     
    	//constructeur avec la liste
    	public MyTableModel(List<Object[]> allLignes){
    		//test si la liste est vide rajouter une ligne vide
    		if (allLignes == null || allLignes.size()<1){
    			allLignes.add(new Object[colonnes.length]);
    		}
    		this.allLignes = allLignes;
    	}
     
    	/* retourne le nombre d'element de la colonne */
    	public int getColumnCount() {
    		return colonnes.length;
    	}
     
    	/* retourne le nombre de lignes */
    	public int getRowCount() {
    		return allLignes.size();
    	}
     
    	/* retourne le nom de la colonne */
    	public String getColumnName(int col) {
    		return colonnes[col];	
    	}
     
    	/* retourne la valeur à la ligne row et colonne col */
    	public Object getValueAt(int row, int col) {
    		return allLignes.get(row)[col];
    	}
     
    	public Class<?> getColumnClass(int c) {
    		return getValueAt(0, c).getClass();
    	}
     
    	/* definie les cellules éditables ou non */
    	public boolean isCellEditable(int row, int col) {
    			return false;
    	}
     
    	/* permet de modifier l'element en placant value a la ligne row 
    	colonne col */
    	public void setValueAt(Object value, int row, int col) {
    		allLignes.get(row)[col] = value;
    		fireTableCellUpdated(row, col); // on signal un changement
    	}
     
    	//Rempli le tableau
    	public void remplie(List<Object[]> lignes){
    		allLignes = lignes;
    		//On signale le changement des données aux listeners :
    		fireTableDataChanged();
    	}
     
    	//Vide la table
    	public void vide(){
    		allLignes.removeAll(allLignes);
    		fireTableRowsDeleted(0,getRowCount());
    	}	
    }
    Quand je lance le ^programme, j'obtiens ceci :
    http://cjoint.com/data/hzqDCHWGx6.htm

    Seul les éléments de la premiere colonne sont centrées mais pas les autres

    Quelqu'un aurait-il une explication ainsi qu'une solution a me proposer ?

    Merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    je pense que tu n'as pas compris comment est utilisé un CellRenderer. L'objet est crée une seule fois puis deplacé, modifié et affiché autant de fois qu'il y a de cellule. Il est inutile donc de surcharger le constructeur car le CellRenderer sera plus ou moins modifié par l'appel de getTableCellRendererComponent(...);
    La seule chose a mettre dans le constructeur est le setOpaque(true); si tu veut modifier le background.
    Si tu herite de DefaultCellRenderer je pense que tu dois surcharger getTableCellRendererComponent de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public Component getTableCellRendererComponent(JTable table, Object value,
                              boolean isSelected, boolean hasFocus, int row, int column) {
            super(table, value, isSelected, hasFocus, row, column);
            this.setHorizontalAlignment(CENTER);
            this.setVerticalAlignment(CENTER); // inutile c la valeur par defaut
        }
    PS petite question t'utilise quel LookAndFeel ?

Discussions similaires

  1. Centrer verticalement les éléments d'une ligne
    Par codera dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 23/12/2012, 22h27
  2. [AC-2007] Changer la couleur des cases à cocher
    Par manusp dans le forum IHM
    Réponses: 3
    Dernier message: 02/03/2011, 14h26
  3. Changer la couleur des cases d'un DataGrid
    Par zebiloute dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 19h29
  4. Réponses: 3
    Dernier message: 26/05/2009, 14h21
  5. Conserver les éléments d'une JTable
    Par toto10 dans le forum Composants
    Réponses: 10
    Dernier message: 11/05/2006, 17h13

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