Partage
  • Partager sur Facebook
  • Partager sur Twitter

JTable

Modification du rendu de cellule

Anonyme
    10 décembre 2010 à 23:58:34

    Bonsoir,

    J'essaye depuis plus d'une heure de comprendre pourquoi ce code ne marche pas. Tous ce que je souhaite c'est modifier le rendu de mes cellules. Par exemple si dans mon tableau j'ai des JButton ou des Color je voudrais afficher les boutons ou remplir le fond de la cellule avec la couleur en question.

    Voici mon code :

    La fenetre
    import java.awt.BorderLayout;
    import java.awt.Color;
    
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JTable;
    
    
    public class Tab extends JFrame {
    
    
    	
    	public Tab()
    	{
    		setTitle("Test sur les tableau");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(0,0,500,500);
    		
    		Object[][] donnees = {  
    			      {"Swing", "Astral", "standard", Color.red, Boolean.TRUE}, 
    			      {"Swing", "Mistral", "standard", Color.yellow, Boolean.FALSE}, 
    			      {"Gin", "Oasis", "standard", Color.blue, Boolean.FALSE},
    			      {"Gin", "boomerang", "compétition", Color.green, Boolean.TRUE},
    			      {"Advance", "Omega", "performance", Color.cyan, Boolean.TRUE}, 
    			} ;
    			String[] titreColonnes = { "marque","modèle", "homologation",
    			                           "couleur", "vérifiée ?"}; 	
    		
    		ModelTab mm = new ModelTab(donnees, titreColonnes); 
    		JTable jTable2 = new JTable(mm); 
    
    		
    		
    		jTable2.setDefaultRenderer(JComponent.class,new MonAfficheurCelluleBool()); 
    		jTable2.setVisible(true);
    		getContentPane().add(jTable2,BorderLayout.CENTER);
    
    		setVisible(true);
    	}
    
    
    	
    	
    	public static void main(String[] args)
    	{
    		new Tab();
    	}
    	
    	
    	
    }
    


    le modele
    import javax.swing.table.AbstractTableModel;
    
    
    public class ModelTab extends AbstractTableModel { 
    	   Object donnees[][];
    	   String titres[];
    	   
    	   public ModelTab(Object donnees[][], String titres[]) { 
    	      this.donnees = donnees; 
    	      this.titres = titres; 
    	   } 
    	   public int getColumnCount() { 
    	      return donnees[0].length; 
    	   }
    	   public Object getValueAt(int parm1, int parm2) { 
    	      return donnees[parm1][parm2]; 
    	   }
    	   public int getRowCount() { 
    	      return donnees.length; 
    	   }
    	   public String getColumnName(int col){ 
    	      return titres[col]; 
    	   } 
    
    }
    


    import java.awt.Color;
    import java.awt.Component;
    
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
    
    class MonAfficheurCelluleBool extends JLabel implements TableCellRenderer {
       public MonAfficheurCelluleBool() {
    	   
          this.setOpaque(true);
       }
       public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
    	   
          setForeground(Color.red);
          setHorizontalAlignment(JLabel.CENTER);
          if (((Boolean)value).booleanValue())
        	  {
        	  setText("OUI");
        	  
        	  }
          else setText("NON");
          return this;
       }
    }
    


    En fait j'ai remarqué que je ne rentre jamais dans la methode getTableCellRendererComponent. J'ai fait des tests aussi bien pour les booleans que les couleurs ou des JButton. Il ne se passe jamais rien.

    Merci pour votre aide
    • Partager sur Facebook
    • Partager sur Twitter

    JTable

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown