J'espérais que quelqu'un pourrait me expliquer quelque chose que j'ai trouvé ma solution, mais je ne comprends pas pourquoi cela fonctionne. Je voulais définir un rendu par défaut par type de classe à une table entière, ne sachant pas à la création où les objets seront dans le tableau.Java - Modification JTable par classe
j'avais déclaré JTable et définir la valeur par défaut à celle de renderer moi-même, pour la classe Calendar
de sorte que les Calendar
s donneraient une représentation significative, non seulement un toString()
d'eux-mêmes.
JTable table = new JTable();
table.setDefaultRenderer(Calendar.class, new MyRenderer());
public class MyRenderer extends DefaultTableCellRenderer{
public MyRenderer() { super(); }
@Override
public void setValue(Object value){
setText(makeCalendarToDate((GregorianCalendar)value));
}
}
Cela ne fonctionnerait pas jusqu'à ce que je l'emporterait sur la méthode getColumnClass
comme cela a été fait Here
Selon le soleil de Documentation, il semble que getColumnClass
devrait faire exactement ce qui a été redéfinie dans l'exemple que j'ai donné ci-dessus - pourquoi il ne travailler quand je remplace cette méthode, mais pas quand je quitte l'implémentation de stock?
Maintenant, je peux remplir les colonnes Calendar
en attendant qu'ils remplissent la 0e rangée, ce que je voulais, mais qu'est-ce qui m'a empêché de le faire en premier lieu?
si j'utilisais de JTable et non AbstractTableModel? Est-il toujours mis en œuvre de la même manière? – Ryan
Si vous laissez JTable prendre soin du modèle, il utilisera DefaultTableModel si je me souviens bien. Et DefaultTableModel est basé sur AbstractTableModel. Je pense que toutes les implémentations qui viennent avec Swing fonctionnent de la même manière et je doute qu'il ne soit même pas possible de faire ce travail automatiquement. Vous pouvez vérifier ce que renvoie getValueAt mais cela ne fonctionnerait pas avec des valeurs nulles. – Carlos
Génial! Alors qu'il fait sorte de sens, la Documentation AbstractTableModel correspond à ce que vous dites qu'il devrait être, il retourne juste la classe Object ... mais la documentation JTable indique qu'il retourne en fait la classe de (0, i), mais retourne toujours toujours Classe d'objet - une idée pour laquelle? Il déclare qu'il devrait retourner n'importe quelle classe qui est là. – Ryan