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

AWT/Swing Java Discussion :

[DefaultTableCellRenderer] Problème d'affichage des données et du renderer


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut [DefaultTableCellRenderer] Problème d'affichage des données et du renderer
    Bonjour à tous,

    J'ai un petit problème avec un TableCellRenderer.

    J'essaye d'afficher des données dans une table, mais j'aimerais pouvoir en meme temps changer l'affichage de ces données (dans le code ci-dessous j'affiche juste une ligne sur deux de couleur différente).

    Mais en gros je n'arrive qu'a obtenir soit l'affichage des données, soit l'affichage des couleurs.

    Classe qui update ma table:
    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
     
             /**
             * Update la JTable apres chaque evenement
             *
             */
    	public void updateJTableCalendar() {
     
    		// On definie le model
    		EventModel model = new EventModel();
    		TableCellRenderer modelRenderer = new EventModelRenderer();
     
    		// On instancie la variable JTableCalendar et la ScrollPane
    		JTableCalendar = new JTable(model);
    		model.fireTableDataChanged();
     
    		// on applique le model renderer
                    JTableCalendar.setDefaultRenderer(JLabel.class,modelRenderer);
     
    		pane = new JScrollPane(JTableCalendar);
    		pane.setBounds(7, 5, 784, 718);
     
    		// On ajoute la table au panel
    		JPanelCalendar.add(pane);
     
    		JTableCalendar.repaint();
    		pane.repaint();
    		JPanelCalendar.repaint();
     
     
     
    	}
    voici EventModel qui affiche les donnée :

    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
     
    public class EventModel extends AbstractTableModel {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	/**
             * 
             */
    	public Class<?> getColumnClass(int arg0) {
    		// TODO Auto-generated method stub
    		return JLabel.class;
    	}
     
    	/**
             * Renvoi le nombre de colonne
             */
    	public int getColumnCount() {
     
    		return 8;
    	}
     
    	/**
             * Renvoi le nom des colonnes
             */
    	public String getColumnName(int colonne) {
     
    		String jour = null;
                    ..........	
    		return jour;
    	}
     
    	/**
             * Renvoi le nombre de ligne
             */
    	public int getRowCount() {
     
    		// On fixe le nombre de ligne a 48 (2*24h)
    		return 48;
    	}
     
    	/**
             * Renvoi la valeur d'une case en x, y
             */
    	public String getValueAt(int ligne, int colonne) {
     
    		JLabel donnee = new JLabel();
     
    		switch(colonne) {
     
    			// Cas des heures
    			case 0:
    				if( (ligne % 2) == 0 ) {
    					if(ligne != 0) ligne = ligne - ligne/2;
    					if(ligne < 10) donnee.setText("0" + ligne + ":00");
    					else donnee.setText(ligne + ":00");
    				}
    				else donnee.setText("");
     
    			break;
    		}
     
    		return donnee.getText();
    	}
     
    }
    et Voilà la classe EventModelRenderer qui est censé affiche les ligne d'une couleur différente

    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
     
    public class EventModelRenderer extends DefaultTableCellRenderer {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private Color lightBlue = new Color(241, 245, 250);
    	private Color blue = new Color(61, 128, 223);
     
    	/**
             * Constructeur
             *
             */
    	public EventModelRenderer() {
    		super();
    	}
     
    	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);
     
    		if (value instanceof JLabel) {
     
    			if((row % 2) == 0) {
    				cell.setBackground(lightBlue);
    			}
    			else cell.setBackground(Color.WHITE);
     
    			if(isSelected) cell.setBackground(blue);
     
    		}
     
    		return cell;
    	}
     
    }
    Voilà si quelqu'un aurait une solution ça serait vraiment cool.

    Désolé si mon problème a déjà été posté ailleurs, mais je n'ai rien trouvé en faisant mes recherches.

    Merci encore.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Ton TableModel n'est pas censé utiliser de JLabel dans la méthode getValueAt(), mais des String des Double etc... Donc je ne vois pas bien pourquoi tu crées un JLabel.

    Dans ton renderer, tu dois remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (value instanceof JLabel) {
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (cell instanceof JLabel) {
    "value" est l'objet renvoyé par le modèle, ce n'est pas un objet graphique.

    Sinon toujours dans la même idée, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTableCalendar.setDefaultRenderer(JLabel.class,modelRenderer);
    Le premier argument correspond là encore au type d'objet renvoyé par le modèle, donc String.class

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut
    Merci ça à fonctionné. J'ai fait les changements que tu m'a proposé sauf que j'ai mit Object. class à la place de String.class.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTableCalendar.setDefaultRenderer(Object.class, modelRenderer);

Discussions similaires

  1. Réponses: 25
    Dernier message: 27/07/2007, 14h46
  2. [JXTreeTable] Problème d'affichage des données
    Par grabriel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 01/03/2007, 19h37
  3. [MySQL] Problème avec affichage des données d'une base MySQL
    Par leclone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/12/2006, 12h40
  4. [MySQL] Problème d'affichage des données!
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/09/2006, 15h43
  5. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07

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