Ajouter une image ou un icône dans JTable
La classe JTable fournit une méthode pour insérer les icônes ou les images. Il faut préciser à JTable le type d'objets stockés dans la colonne du tableau pour qu'elle puisse choisir le rendu approprié. Cela se fait par l'appel de la méthode getColumnClass(...):public Class getColumnClass(int column)Java détermine si vous avez spécifier un moteur de rendu de JTable ou pas, sinon JTable invoque le modèle et appelle la méthode getColumnClass() qui récupère le type de la cellule dans la première ligne. Ensuite, elle le compare avec une liste de types de données dans laquelle les rendus sont enregistrés. Cette liste est initialisée par JTable, mais vous pouvez ajouter ou modifier. Parmi les rendus on trouve ImageIcon et Icon.
{
return getValueAt(0, column).getClass();
}
L'exemple suivant montre comment ajouter des images à une colonne:
import javax.swing.*;Résultat après exécution:
import javax.swing.table.*;
public class Table_image extends JFrame
{
public Table_image()
{
ImageIcon icone1 = new ImageIcon("1.png");
ImageIcon icone2 = new ImageIcon("2.png");
ImageIcon icone3 = new ImageIcon("3.png");
ImageIcon icone4 = new ImageIcon("4.png");
String[] Titre = {"Système d'exploitation", "Popularité"};
Object[][] data =
{
{icone1, "Android: 76.6%"},
{icone2, "IOS: 19.7%"},
{icone3, "Windows Phone: 2.8%"},
{icone4, "BlackBerry OS: 1%"},
};
DefaultTableModel modele = new DefaultTableModel(data, Titre);
JTable table = new JTable( modele )
{
/*détection automatique des types de données
*de toutes les colonnes
*/
public Class getColumnClass(int colonne)
{
return getValueAt(0, colonne).getClass();
}
};
//modifier l'hauteur des lignes
table.setRowHeight(100);
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}
public static void main(String[] args)
{
Table_image frame = new Table_image();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}
Si on n’implémente pas la méthode getColumnClass, la colonne va contenir du texte(nom du fichier) et pas des images. Par exemple, au lieu d'insérer le logo Android, JTable affichera "1.png".
Si vous utilisez votre propre modèle qui hérite de AbstractTableModel, n'oubliez pas d'implémenter la méthode getColumnClass dans la classe modèle.
class Modele extends AbstractTableModel{Lisez davantage sur les éditeurs et les rendus sur le site officiel de java: Editors and Renderers.
private Object[][] data;
private String[] title;
public Modele(Object[][] data, String[] title){
this.data = data;
this.title = title;
}
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
public int getColumnCount() {
return this.title.length;
}
public int getRowCount() {
return this.data.length;
}
public Object getValueAt(int row, int col) {
return this.data[row][col];
}
}