Domanda

Speravo che qualcuno potesse spiegarmi qualcosa come ho trovato la mia soluzione, ma non capisco perché funziona. Volevo impostare un rendering predefinito per tipo di classe su un'intera tabella, non sapendo alla creazione in cui gli oggetti saranno in esso.

Avevo dichiarato un jtable e impostato il renderer predefinito a quello del mio, per la classe Calendar in modo che qualsiasi Calendars darebbe una rappresentazione significativa, non solo un toString() di se stessi.

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));
    }
}
.

Questo non funzionerebbe finché non avrei invaso il metodo getColumnClass come stato fatto qui

Secondo il sole Documentazione , sembra che getColumnClass dovrebbe fare esattamente ciò che è stato sovrascritto nell'esempio che ho dato sopra - perché funziona quando sovrascrivo quel metodo ma non quando lascio l'implementazione delle azioni?

Ora posso riempire la colonna con i generatori di generatori in attesa che riempiono la 0a fila, che è ciò che volevo, ma ciò che mi ha impedito di farlo in primo luogo?

È stato utile?

Soluzione

Jtable Ottiene la classe della colonna dal modello.La risposta risiede nell'attuazione di AbstractTableModel, supponendo che sia quello che hai basato il modello di tabella.In AbstractTableModel GetColumnClass è stato implementato in questo modo: return Object.class;, quindi, a meno che non lo sovrascrive, gli oggetti della colonna verranno sempre gestiti come oggetto.Questo non è qualcosa che il modello gestirà automaticamente.Devi solo ignorare GeeColumnClass, non c'è modo di aggirare questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top