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
|
public class MultiLigneCellEditor extends AbstractCellEditor implements TableCellEditor
{
private boolean enCours = false;
private static MultiLigneCellEditor editeur;
JTextArea textArea;
JTable table;
private int hauteurLigne = 0;
private int hauteurLigneAutresColonnes = 0;
int ligne, colonne;
private MultiLigneCellEditor(JTable ta)
{
super();
table = ta;
textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
traiterKey();
}
});
}
public synchronized static MultiLigneCellEditor getInstance(Tableau t)
{
if (editeur == null)
{
editeur = new MultiLigneCellEditor(t) ;
}
return editeur ;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column)
{
enCours = true;
String texte = ((String)value).replace("<br>", "\n");
textArea.setText(texte);
hauteurLigne = table.getRowHeight(row);
ligne = row;
colonne = column;
hauteurLigneAutresColonnes = hauteurLigneAutresColonnes();
return textArea;
}
private int hauteurLigneAutresColonnes()
{
int h = 0;
for(int j=0 ; j<table.getColumnCount() ; j++)
{
if (j != colonne)
{
TableCellRenderer cellRenderer = table.getCellRenderer(ligne, j);
Object o = table.getValueAt(ligne, j);
JLabel label = (JLabel) cellRenderer.getTableCellRendererComponent(table, o, false, false, ligne, j);
if (label.getPreferredSize().height > h) h = label.getPreferredSize().height;
}
}
return h;
}
protected void traiterKey()
{
int h = (int) textArea.getPreferredSize().getHeight();
if (h > hauteurLigne )
{
hauteurLigne = h;
table.setRowHeight(ligne, hauteurLigne);
}
else if (h < hauteurLigne)
{
hauteurLigne = (h < hauteurLigneAutresColonnes ? hauteurLigneAutresColonnes : h);
table.setRowHeight(ligne, hauteurLigne);
}
}
public Object getCellEditorValue()
{
enCours = false;
String texte = textArea.getText().replace("\n","<br>");
return texte;
}
public boolean isEnCours()
{
return enCours;
}
} |
Partager