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

Interfaces Graphiques en Java Discussion :

Colorier dynamiquement une seule cellule d'une JTable


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 38
    Points : 35
    Points
    35
    Par défaut Colorier dynamiquement une seule cellule d'une JTable
    Bonjour,

    Mon problème est le suivant :

    Je souhaite colorier une seule cellule d'une JTable en fonction de son contenu qui peut varier, lorsque je clique sur celle-ci.
    Dans le code suivant (qui n'est juste qu'un test avant d'implémenter la logique dans une application plus complexe) , le Rendered est bien exécuté lorsque la table est créée, mais ensuite lorsque je clique (avec le bouton droit) sur une case, rien ne se passe.

    Par contre, si je dé-commente les ligne suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     int nbCol = data[0].length; //   Nombre de colonnes  
            for (int i=0; i<nbCol ;i++)
               table.getColumnModel().getColumn(i).setCellRenderer(new CustomRenderer());//use custom cell rendered for col 1
    alors cela fonctionne, mais je ne comprends pas pourquoi. Ne puis-je pas définir le rendered pour les cellules d'une autre façon ?
    J'ai ajouté dans ce code quelques println pour tracer.

    Merci beaucoup d'avance

    Gégé


    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    package test;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JDialog;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableModel;
    import javax.swing.JButton;
     
    public class TestTableCouleurs extends JDialog
    {
     
    	private static final long serialVersionUID = 1L;
    	private static Object[] columnName = {"Nom", "âge"};
        private static Object[][] data = {{"Jean Dupond", "18"}, {"Pierre_François   Du Verrou de la Targette", "22"},  {"Jacques Durand", "36"}};
        private final JTable table;
      //  private  DefaultTableModel model  = null;
     
        TestTableCouleurs() 
        {
        	getContentPane().setLayout(null);
        	setSize(338,213);  
        	setTitle("Test de coloriage des cellules");
            table = new JTable(data, columnName);
     
            table.setDefaultRenderer(String.class, new CustomRenderer());
            table.addMouseListener(new MouseAdapter()  
            {
    			public void mousePressed(MouseEvent e)	{colorier(e);}
    			public void mouseReleased(MouseEvent e)	{colorier(e);}
            });
     
        	JScrollPane Scroll = new  JScrollPane(table );
        	Scroll.setBounds(10,25,300,76);
        	getContentPane().add(Scroll);
        	 TableColumnModel colModel = table.getColumnModel();
        	double factor = Scroll.getWidth();;
        	double[] pourCent = {0.8,0.2};
            for (int i = 0; i < pourCent.length; i++) 
    		{
    			TableColumn column = colModel.getColumn(i);
    	 		column.setPreferredWidth((int) (pourCent[i] * factor));
    	 	}
     
     
            JButton Terminer = new JButton("Terminer");
            Terminer.addActionListener(new ActionListener() 
            {
            	public void actionPerformed(ActionEvent arg0) 
            	{
            		System.exit(0);
            	}
            });
            Terminer.setBounds(110, 122, 89, 23);
            getContentPane().add(Terminer);
            setLocationRelativeTo(null);
            /*
            int nbCol = data[0].length; //   Nombre de colonnes  
            for (int i=0; i<nbCol ;i++)
               table.getColumnModel().getColumn(i).setCellRenderer(new CustomRenderer());//use custom cell rendered for col 1
            */
            setVisible(true);
        }
     
        void colorier(MouseEvent e)
        {
        	    int row = table.rowAtPoint(e.getPoint()); 
        	    int  column = table.columnAtPoint(e.getPoint());
        		System.out.println(  " OK " );
        		CustomRenderer.goOn = true;
        		TableModel model =  table.getModel();
        		String cellVal = (String) table.getValueAt(row , column);
        		model.setValueAt(1, row , column);
        		table.setValueAt(cellVal,row , column);
        }
     
     
        JTable getTable() {
            return table;
        }
     
        static class CustomRenderer extends DefaultTableCellRenderer 
        {
     
    		private static final long serialVersionUID = 1L;
    		private static boolean goOn = false;
    		public CustomRenderer()
            {
                super.setOpaque(true);
            }
    		@Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                    int row, int column)   
    		{
     
    			Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
             	System.out.println(goOn + " " + row + "   " + column);
     
             	if (goOn) 
             	{
             		c.setBackground(Color.CYAN);
             		System.out.println( "Changé " );
             	}
                return c;
            }
        }
     
        public static void main(String[] args) 
        {
        	new TestTableCouleurs();
        }
    }

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 38
    Points : 35
    Points
    35
    Par défaut
    Je viens de comprendre et donc répondre à ma question.

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

Discussions similaires

  1. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 11h16
  2. Réponses: 3
    Dernier message: 20/06/2007, 23h18
  3. [JTable] Colorier une cellule d'une JTable
    Par Houssem dans le forum Composants
    Réponses: 1
    Dernier message: 15/05/2007, 15h54
  4. [JTable] Changer le contenu d'une seule cellule
    Par terminagroo dans le forum Composants
    Réponses: 7
    Dernier message: 05/07/2005, 14h50
  5. [JTable] Sélection d'une seule cellule
    Par Amara dans le forum Composants
    Réponses: 2
    Dernier message: 01/06/2005, 15h48

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