noussa1985
Messages postés31Date d'inscriptionjeudi 14 juin 2007StatutMembreDernière intervention20 avril 2008
-
9 févr. 2008 à 00:20
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
11 févr. 2008 à 00:06
Bonsoir à tous,
SVP j'ai besoin de votre aide,
dans mon programme j'essai d'afficher des valeures trouvant dans un fichier sur un JTable.Jarrive à faire l'affichage mais le probleme est je dois afficher toutes les valeures portant le nombre 20(val=20) du fichier en couleures rouge dans mon JTable.
Est ce que quelcun a une aide???
SVP aidez moi
Bonne nuit
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 10 févr. 2008 à 20:42
Salut:
D'aprés ce que je viens de comprendre tu veux colorer toutes les cellules ayant la valeur 20 et cette valeur peut apparaître dans différentes colonnes.
Il suffit de procéder ainsi:
// La classe CustomTableCellRenderer public class CustomTableCellRenderer extends DefaultTableCellRenderer {
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.toString().equals("20")) {
cell.setForeground(Color.RED);
} else {
cell.setForeground(Color.BLUE);
}
return cell;
}
}
// La classe Affichage
public class Affichage extends JFrame {
public void initComponents() {
// ...
JTable table = new JTable(model);
table.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 févr. 2008 à 12:25
Salut:
Il faut définir un TableCellRenderer pour la colonne en question:
public class CustomCellRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = new JLabel();
if ((Integer)value <= 20) {
label.setText("<html>" +
"" + value + "" +
"</html>");
} else {
label.setText("<html>" +
"" + value + "" +
"</html>");
}
return label;
}
}
JTable table = new JTable(...);
// Il faut changer "Colonne" par le nom de la colonne en question
table.getColumn("Colonne").setCellRenderer(new CustomCellRenderer());
noussa1985
Messages postés31Date d'inscriptionjeudi 14 juin 2007StatutMembreDernière intervention20 avril 2008 9 févr. 2008 à 17:56
Merci bien pour votre aide mais je suis debutante en java et je connait pas la classe TableCellRenderer,c'est quoi son utilité?c'est quoi la relation entre elle et la classe JTable?en + vous avez defini la methode getTableCellRendererComponent sans l'avoir utilisé.
Je veux ajouter quelque chose :je connait pas ou est ce que la variable (var=20)va etre placé dans mon JTable.
Merci bien de vouloir me repondre
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 févr. 2008 à 19:44
Salut:
1. L'interface TableCellRenderer est nécessaire pour définir comment on affiche le contenu d'une cellule d'un objet JTable.
2. Il faut implémenter cette interface pour colorer le texte d'une cellule d'un objet JTable et faire beaucoup d'autre choses comme l'affichage d'une image, ...
3. C'est ce que je viens de faire: CustomTableCellRenderer implémente cette interface qui contient une seule méthode getTableCellRendererComponent()
4. Autres questions?
Cordialement ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 févr. 2008 à 20:00
Salut:
Est ce que tu peux nous fournir la partie du code où tu déclare ton objet JTable y compris la déclaration des données et des noms des colonnes de la table.
noussa1985
Messages postés31Date d'inscriptionjeudi 14 juin 2007StatutMembreDernière intervention20 avril 2008 9 févr. 2008 à 20:29
RQ:le fichier est ss forme de tableau de val
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.Vector;
public String path;
JPanel p=new JPanel();
public DefaultTableModel model;
public Affichage(String path){
this.path=path;
initComponents();
}
public void initComponents(){
model = new DefaultTableModel();
int nb =getNbAttribut();
for(int i = 0; i < nb; i++)//on place les titres
model.addColumn("A"+(i+1));
try {
readFile(model);//lecture du fichier
} catch (Exception e) {
e.printStackTrace();
}
}
/********** Methode qui le fichier par tokens et les met ds un vecteur ***********/
public void readFile(DefaultTableModel model) throws Exception{
Scanner sc = new Scanner(new FileInputStream(path)); //on ouvre le fichier pour le lire
while(sc.hasNext()){ //tant qu'il y a des choses à lire
StringTokenizer token = new StringTokenizer(sc.nextLine(), " ");
Vector<String> rowData = new Vector<String>();
while(token.hasMoreTokens()) //lecture des token et on les mets dans le vecteur
rowData.add(token.nextToken());
model.addRow(rowData);//on ajoute la ligne
}
sc.close();
}
/**********Methode qui retourne le nbre de ligne ds le fichier***********/
public int getNbLine(){
int cpt=0;
try {
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 10 févr. 2008 à 11:42
Salut Bent Bladi:
Le code source que tu as fournit ne précise pas quelle colonne contient des données numériques.
Le code que je t'ai posté est simple à intégrer:
1. Tu crées une nouvelle classe pour CustomTableCellRenderer.
2. Tu identifies le nom de la colonne qui contient les données numériques que tu veux colorer, par exemple si c'est A2 tu procéde ainsi:
// A modifier
public void initComponents(){
model = new DefaultTableModel();
int nb =getNbAttribut();
for(int i = 0; i < nb; i++)//on place les titres
model.addColumn("A"+(i+1));
try {
readFile(model);//lecture du fichier
} catch (Exception e) {
e.printStackTrace();
}
//setContentPane(new JScrollPane(new JTable(model))); // Mon JTable
JTable table = new JTable(model);
// Comme je ne connais pas la colonne qui contient des données numériques
// Je vais supposer que c'est la colonne ayant le nom "A2"
// A toi de le corriger si mon intuition m' a trompé.
table.getColumn("A2").setCellRenderer(new CustomTableCellRenderer());
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
noussa1985
Messages postés31Date d'inscriptionjeudi 14 juin 2007StatutMembreDernière intervention20 avril 2008 10 févr. 2008 à 13:19
St Weld Bladi:
Merci bien pour votre aide mon pbl est que je connait pas ds quelle colonne(s) ni ds quel cellule la val va etre placée.
En tout ca merci bien,j'ai au moin maintenant une idée comment utiliser TableCellRenderer je vais essayer tte seule
Bonne journée
noussa1985
Messages postés31Date d'inscriptionjeudi 14 juin 2007StatutMembreDernière intervention20 avril 2008 10 févr. 2008 à 18:45
St weld bladi etes vous encore là?
j'ai pensé que j'ai trouvé le solution mais malheureusement tjrs à l'affichage la val 20 n'est pas coloré en rouge.
SVP aidez moi c'est trop urgent.
mon fichier sous la forme de : a b 2 20
1 4 7 5
20 1 v 7
public class CustomTableCellRenderer extends DefaultTableCellRenderer {
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 String )
{
String amount = (String) value;
if( amount.equals("?"))
{
// cell.setBackground( Color.red );
// You can also customize the Font and Foreground this way
cell.setForeground(Color.red);
// cell.setFont();
}
else
{
cell.setForeground( Color.blue );
}
}
return cell;
}
}
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class Affichage extends JFrame{
public String path;
JPanel p =new JPanel();
public DefaultTableModel model;
public Affichage(String path){
this.path= path;
initComponents();
}
public void initComponents(){
model = new DefaultTableModel();
int nb =getNbAttribut();
for(int i = 0; i < nb; i++)//on place les titres
model.addColumn("A"+(i+1));
try {
readFile(model);//lecture du fichier
} catch (Exception e) {
e.printStackTrace();
}
// Partie Ajoutée:
JTable table =new JTable(model);
TableCellRenderer renderer = new CustomTableCellRenderer();
try
{
table.setDefaultRenderer( Class.forName //Sets a default cell renderer to be used if no
( "java.lang.String" ), renderer ); //renderer has been set in a TableColumn
}
catch( ClassNotFoundException ex )
{
// System.exit( 0 );
System.out.println("erreur");
}
}
/********** Methode qui le fichier par tokens et les met ds un vecteur ***********/
public void readFile(DefaultTableModel model) throws Exception{
Scanner sc = new Scanner(new FileInputStream(path)); //on ouvre le fichier pour le lire
while(sc.hasNext()){ //tant qu'il y a des choses à lire
StringTokenizer token = new StringTokenizer(sc.nextLine(), " ");
Vector<String> rowData = new Vector<String>();
while(token.hasMoreTokens()) //lecture des token et on les mets dans le vecteur
rowData.add(token.nextToken());
model.addRow(rowData);//on ajoute la ligne
}
sc.close();
}
/**********Methode qui retourne le nbre de ligne ds le fichier***********/
public int getNbLine(){
int cpt=0;
try {
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 11 févr. 2008 à 00:06