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.
