Comment colorier une ligne de JTable

208893 Messages postés 55 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 21 décembre 2010 - 14 déc. 2010 à 09:58
 Utilisateur anonyme - 22 déc. 2010 à 10:34
salut;
j'ai un problème au niveau de mon application. j'ai crée un JTable et j'aime colorier certain ligne après un test que si je trouve dans le champ note un note inférieur a 15 le ligne est colorier en rouge.
est ce que il y a quelqu'un aime m'aider?
merci d'avance

5 réponses

Utilisateur anonyme
14 déc. 2010 à 14:17
Bonjour

Utilise la méthode setDefaultRenderer(Class<?> columnClass, TableCellRenderer renderer), passe-lui ta propre implémentation de l'interface TableCellRenderer. La seule méthode à implémenter reçoit en paramètre l'indice de la ligne et celui de la colonne ce qui te permettra de colorier celle qui t'intéresse. Bon courage.










208893 Messages postés 55 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 21 décembre 2010 2
14 déc. 2010 à 14:27
salut;
merci monsieur gouessej
j'ai fait déjà setDefaultRenderer
voila mon code
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class tab extends JFrame  {


private JToolBar tool = new JToolBar();
private JButton load = new JButton(new ImageIcon("img/load.png"));
private JSplitPane split;
private JPanel result = new JPanel();
private String requete = "select mat,sujet,affectation,date,duree,eval from evaluer  ";
   private JButton ajouter ;
String a;
JTable table1 ;
   


public tab(String requete) {

setSize(600, 500);
setTitle("Liste evaluer");
setLocationRelativeTo(null);

ajouter= new JButton ("exporter") ;
this.add(ajouter,new BorderLayout(15,30).SOUTH);
this.requete=requete;
initContent();
initTable();
 

}


public tab(){
setSize(600, 300);
setTitle("Liste evaluer");
setLocationRelativeTo(null);



initContent();
initTable();
}



private void initToolbar(){
load.setPreferredSize(new Dimension(30, 35));
load.setBorder(null);
load.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
initTable();
}
});

tool.add(load);

}


public void initContent(){
//Vous connaissez ça...
result.setLayout(new BorderLayout());
JLabel jlb = new JLabel(new ImageIcon("images/600x120.jpg"));
jlb.setPreferredSize(new Dimension(600, 120));
JScrollPane dd = new JScrollPane(jlb);
split = new JSplitPane(JSplitPane.VERTICAL_SPLIT,jlb , result);
split.setDividerLocation(100);
getContentPane().add(split, BorderLayout.CENTER);		
}

/**
 * 
 * @param query
 */
 
public void initTable(){

try {

long start = System.currentTimeMillis();
Statement state = ConnectDB.getInstance()
.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
ResultSet.CONCUR_READ_ONLY
);


ResultSet res = state.executeQuery(requete);
ResultSetMetaData meta = res.getMetaData();
Object[] column = new Object[meta.getColumnCount()];

for(int i = 1 ; i <= meta.getColumnCount(); i++){
column[i-1] = meta.getColumnName(i);
}
res.last();
int rowCount = res.getRow();
Object[][] data = new Object[res.getRow()][meta.getColumnCount()];
String[] column1 = { "Matricule","Sujet", "Affectation",
                    "Date", "Duree ", "Note"}; 
res.beforeFirst();
int j = 1;

while(res.next()){
for(int i = 1 ; i <= meta.getColumnCount(); i++){
data[j-1][i-1] = res.getObject(i);
System.out.println(res.getObject(i));
}
j++;
}

                     
res.close();
state.close();

long totalTime = System.currentTimeMillis() - start;

TableModel tbl=new DefaultTableModel(data,column1);

table1 = new JTable(tbl);
//a= table1.getValueAt(2, 2).toString();
int j1=0;
     a=table1.getValueAt(1, 5).toString();
j1=Integer.parseInt(a);
  
   
    //table1.setBackground(Color.yellow);

        if (j1 >= 15){
        	    table1.setSelectionBackground(Color.yellow);
        table1.setRowSelectionInterval(1, 1);	
        } 
        

//table1.setBackground(Color.yellow);

result.removeAll();
result.add(new JScrollPane(table1), BorderLayout.CENTER);
result.add(new JLabel("La demande à été exécuter en " + totalTime + " ms et a retourné " + rowCount + " ligne(s)"), BorderLayout.SOUTH);
result.revalidate();

} catch (SQLException e) {		
result.removeAll();
result.add(new JScrollPane(table1), BorderLayout.CENTER);
result.revalidate();
JOptionPane.showMessageDialog(null, e.getMessage(), "ERREUR ! ", JOptionPane.ERROR_MESSAGE);
}	

}

}

est ça marche pas
merci d'avance
Utilisateur anonyme
14 déc. 2010 à 16:27
Dans ton code, je ne vois aucun appel à la méthode JTable.setDefaultRenderer(Class<?> columnClass, TableCellRenderer renderer) et je ne vois aucune implémentation de l'interface TableCellRenderer. Si je te donne des indications et que tu fais semblant de les suivre, ce n'est pas la peine que j'essaie de t'aider. Suis cet exemple qui vient d'un tutoriel d'Oracle :
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#renderer

Bon courage.










208893 Messages postés 55 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 21 décembre 2010 2
21 déc. 2010 à 08:40
salut gouessej,
j'ai trouvée une solution avec TableCellRenderer mais quand j'utilise avec une tableau avec remplissage manuelle elle donne une résultat mais quand j'utilise avec une tableau avec remplissage automatique elle n'affiche rien voila mon code

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;


public class tab extends JFrame  {


private JToolBar tool = new JToolBar();
private JButton load = new JButton(new ImageIcon("img/load.png"));
private JSplitPane split;
private JPanel result = new JPanel();
private String requete = "select mat,sujet,affectation,date,duree,eval from evaluer  ";
   private JButton ajouter ;
//String a;
JTable table1 ;

public tab(String requete) {

setSize(600, 500);
setTitle("Liste evaluer");
setLocationRelativeTo(null);

ajouter= new JButton ("exporter") ;
this.add(ajouter,new BorderLayout(15,30).SOUTH);
this.requete=requete;
initContent();
initTable();
 
}
public tab(){
setSize(600, 300);
setTitle("Liste evaluer");
setLocationRelativeTo(null);	
initContent();
initTable();
}

private void initToolbar(){
load.setPreferredSize(new Dimension(30, 35));
load.setBorder(null);
load.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
initTable();
}
});

tool.add(load);

}


public void initContent(){
//Vous connaissez ça...
result.setLayout(new BorderLayout());
JLabel jlb = new JLabel(new ImageIcon("images/600x120.jpg"));
jlb.setPreferredSize(new Dimension(600, 120));
JScrollPane dd = new JScrollPane(jlb);
split = new JSplitPane(JSplitPane.VERTICAL_SPLIT,jlb , result);
split.setDividerLocation(100);
getContentPane().add(split, BorderLayout.CENTER);		
}

/**
 * 
 * @param query
 */
 
public void initTable(){

try {

long start = System.currentTimeMillis();
Statement state = ConnectDB.getInstance()
.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
ResultSet.CONCUR_READ_ONLY
);


ResultSet res = state.executeQuery(requete);
ResultSetMetaData meta = res.getMetaData();
Object[] column = new Object[meta.getColumnCount()];

for(int i = 1 ; i <= meta.getColumnCount(); i++){
column[i-1] = meta.getColumnName(i);
}
res.last();
int rowCount = res.getRow();
Object[][] data = new Object[res.getRow()][meta.getColumnCount()];
String[] column1 = { "Matricule","Sujet", "Affectation",
                    "Date", "Duree ", "Note"}; 

res.beforeFirst();
int j = 1;

while(res.next()){
for(int i = 1 ; i <= meta.getColumnCount(); i++){
data[j-1][i-1] = res.getObject(i);
//System.out.println(res.getObject(i));
}

j++;


}   
res.close();
state.close();

final DefaultTableModel tbl=new DefaultTableModel(data,column);
table1 = new JTable(tbl){
public Component prepareRender (TableCellRenderer render, int row, int col){ 	
    Component comp = super.prepareRenderer(render, row, col);
    String s = tbl.getValueAt(row, 5).toString();
int a=Integer.parseInt(s);
if(a>50){
comp.setBackground(Color.gray);}
else {
comp.setBackground(Color.green);
}
return comp;

}
};  

long totalTime = System.currentTimeMillis() - start;

result.removeAll();
result.add(new JScrollPane(table1), BorderLayout.CENTER);
result.add(new JLabel("La demande à été exécuter en " + totalTime + " ms et a retourné " + rowCount + " ligne(s)"), BorderLayout.SOUTH);
result.revalidate();

} catch (SQLException e) {		
result.removeAll();
result.add(new JScrollPane(table1), BorderLayout.CENTER);
result.revalidate();
JOptionPane.showMessageDialog(null, e.getMessage(), "ERREUR ! ", JOptionPane.ERROR_MESSAGE);
}	

}

}

est ce que tu peux m'aider a résoudre?
merci d'avance

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
22 déc. 2010 à 10:34
Récupères-tu au moins des données de ta base? Si ce n'est pas le cas, je ne vois pas trop comment t'aider, ça vient de ta base de données ou de ta façon d'y accéder. Ta requête me semble correcte.

Tu n'utilises pas tout à fait la méthode que je t'ai proposée, je ne suis pas sûr que ça marche dans ton cas particulier.













Rejoignez-nous