Je suis sur JDK 1.3.1. Sinon je n'aurais pas pu utiliser la methode dont
vous parlez...

-----Original Message-----
From: AUVIGNE Lilians (EURIWARE) [mailto:[EMAIL PROTECTED]]
Sent: Friday, February 22, 2002 1:09 AM
To: '[EMAIL PROTECTED]'
Subject: RE: Swing TableCellRenderer compose d'une JEditorPane


en 1.2 l'api ne permet pas d'avoir des lignes de tailles diff�rentes.
mais appartir du 1.3 tu peux avec :
public void setRowHeight(int row, int rowHeight)

> -----Message d'origine-----
> De: Nicolas Sallembien [mailto:[EMAIL PROTECTED]]
> Date: vendredi 22 f�vrier 2002 01:13
> �: '[EMAIL PROTECTED]'
> Objet: Swing TableCellRenderer compose d'une JEditorPane
> 
> 
> Bonjour,
> 
> Une petite question a tous les experts de Swing qui sont sur 
> la liste...
> 
> Je suis en train d'essayer de faire une table dont la hauteur 
> des lignes
> varie en fonction de la longueur du texte qui est contenu 
> dans la cellule.
> 
> J'ai donc implemente mon propre TableCellRenderer base sur un 
> JEditorPane,
> afin de pouvoir gerer le passage a la ligne dans le cas ou ma 
> cellule n'est
> pas assez longue pour contenir le texte. Ca marche si je 
> precise a ma table
> que la rowHeight doit etre fixe, mais je voudrais que la 
> rowHeight de la
> table varie en fonction du fait que le contenu de la cellule 
> necessite un
> passage la ligne ou pas...
> 
> Pour le moment, ma classe qui gere l'affichage des cellules 
> de ma table est
> a peu pres comme ca:
> 
> import java.awt.Component;
> import java.awt.Dimension;
> import java.awt.Rectangle;
> import java.awt.Shape;
> import java.awt.Color;
> import java.util.EventObject;
> import javax.swing.JTable;
> import javax.swing.JEditorPane;
> import javax.swing.UIManager;
> import javax.swing.border.EmptyBorder;
> import javax.swing.text.BadLocationException;
> import javax.swing.text.View;
> import javax.swing.table.TableCellRenderer;
> 
> 
> /**
>  * 
>  * This class is used to render segments of text
>  * into a JTable's cells. A JEditorPane is used to
>  * display styled text on multi lines
>  * 
>  */
> public class SegmentTableCellRenderer
>         extends JEditorPane 
>         implements TableCellRenderer
>         
> {
>    
>     int preferredWidth = 300;
>     
>     public SegmentTableCellRenderer() {
>         super();
> 
>         preferredWidth = 300;
>         setDisabledTextColor(Color.black);
>         
>     }
> 
>     public SegmentTableCellRenderer(int preferredWidth) {
>         super();
>         
>         this.preferredWidth = preferredWidth;
>         setDisabledTextColor(Color.black);
>         
>     }
> 
>     /**
>      *   Method from TableCellRenderer
>      */
>     public Component getTableCellRendererComponent(JTable table,
>             Object value, boolean isSelected, boolean 
> hasFocus, int row,
>             int column)
>     {
> 
>         if (isSelected) {
>             setBackground(getSelectionColor());
>             setForeground(getSelectedTextColor());
>         } else {
>             setBackground(Color.white);
>             setForeground(Color.black);
>         }
>         
>         setFont(table.getFont());
>         
>         if (hasFocus) {
>             setBorder( 
> UIManager.getBorder("Table.focusCellHighlightBorder")
> );      
>             if (table.isCellEditable(row, column)) {
>                 setForeground(
> UIManager.getColor("Table.focusCellForeground") );
>                 setBackground(
> UIManager.getColor("Table.focusCellBackground") );
>             }    
>         }
>         else {
>             setBorder(new EmptyBorder(1, 2, 1, 2));
>         }
> 
>         setText(value.toString());
>         
>         return this;
>     }
> 
> }
> 
> 
> Ensuite dans mon program qui gere la table, je fais ca:
> 
> JTable maTable = new JTable();
> maTable.setModel(unModele);
> 
> maTable.getColumnModel().getColumn(0).setCellRenderer(new
> SegmentTableCellRenderer(300));
> maTable.setRowHeight(80);
> 
> Alors si j'ai quelque chose de trop long, ca passe a la 
> ligne, mais si c'est
> vraiment trop long, alors le texte est tronque a la fin,
> et si le texte n'a pas besoin d'une rowHeight de 80 pour 
> s'afficher alors
> j'ai trop d'espace vide.
> 
> J'ai essaye de faire des calculs savants dans la methode
> getTableCellRendererComponent pour fixer la rowHeight d'une 
> ligne specifique
> en fonction de la longueur du texte et de la longueur de la 
> colonne, mais ca
> ne marche pas vraiment: dans ce cas, j'ai une table avec une 
> seule ligne,
> meme si mon modele contient plein de lignes, et le 
> rafraichissement est tres
> lent. D'autre part la hauteur de la ligne dans ce cas est 
> d'une seule ligne
> de texte quoi qu'il arrive.
> 
> Est ce que vous avez deja rencontre ce probleme? Si oui 
> comment avez vous
> fait pour le resoudre? Je suis certain que c'est possible 
> mais je ne connais
> pas suffisamment l'API des JTables pour trouver la solution 
> et la Javadoc et
> les tutoriels de Sun sont assez limites sur ce cas...
> 
> Merci
> Nicolas
> 


ATTENTION : Si vous n'�tes pas destinataire de ce message, vous n'�tes pas
autoris� � copier, retransmettre, distribuer, r�v�ler ou conserver le
contenu de ce message.
WARNING : If you are not the intended recipient, you are not authorised to
copy, disclose, distribute or retain in this e-mail. 



Répondre à