2010-05-06 8 views
0

J'ai donc essayé d'utiliser l'exemple de Tutorial et de le changer pour qu'il corresponde à mon programme. La méthode getColumnValue renvoie l'objet contenant les informations censées être affichées. Est-ce le chemin à parcourir ou devrait-il plutôt renvoyer la chaîne réelle à afficher. Je suppose que non parce que je mélangerais la présentation avec les données, ce que j'essayais d'éviter.Comment utiliser CellRenderer pour GregorianCalendar?

public class IssueTableFormat implements TableFormat<Appointment> { 

    public int getColumnCount() { 
     return 6; 
    } 

    public String getColumnName(int column) { 
     if(column == 0)  return "Datum"; 
     else if(column == 1) return "Uhrzeit"; 
     else if(column == 2) return "Nummer"; 
     else if(column == 3) return "Name"; 
     else if(column == 4) return "letzte Aktion"; 
     else if(column == 5) return "Kommentar"; 

     throw new IllegalStateException(); 
    } 

    public Object getColumnValue(Appointment issue, int column) { 

     if(column == 0)  return issue.getDate(); 
     else if(column == 1) return issue.getDate(); 
     else if(column == 2) return issue.getSample(); 
     else if(column == 3) return issue.getSample(); 
     else if(column == 4) return issue.getHistory(); 
     else if(column == 5) return issue.getComment(); 

     throw new IllegalStateException(); 
    } 
} 

La colonne 0 et 1 contiennent un objet GregorianCalendar, mais je veux la colonne 0 pour afficher la date et 1 pour afficher le temps. Par conséquent, je sais que l'utilisation de cellRenderers peut aider à résoudre ce problème.

C'est ce que j'ai essayé.

public class DateRenderer extends DefaultTableCellRenderer { 

    public DateRenderer() { super(); } 

    public void setValue(Object value) { 
     GregorianCalendar g =(GregorianCalendar) value; 
     value=g.get(GregorianCalendar.HOUR); 
    } 
} 

Mais la cellule ne montre rien, qu'est-ce qui ne va pas ici?

Répondre

1

Pour moi, il semble vraiment bizarre que vous avez

if(column == 0)  return issue.getDate(); 
else if(column == 1) return issue.getDate(); 

mais souhaitez les afficher des choses différentes. Je changerais le modèle pour qu'il ait deux variables différentes pour ces deux cellules différentes, ou qu'il renvoie moins de valeurs différentes de getColumnValue.

+0

ok, mais quand j'avais des méthodes pour retourner la valeur réelle qui est censée être affichée, on m'a dit de ne pas mélanger les données et la présentation. – HansDampf

1

La méthode setValue() de votre moteur de rendu ne fait pas faire n'importe quoi avec la valeur qu'il calcule. Je pense que vous voulez ceci:

public void setValue(Object value) { 
    GregorianCalendar g =(GregorianCalendar) value; 
    super.setValue(g.get(GregorianCalendar.HOUR)); 
} 
1

Je vous ai déjà donné le code de travail sur la façon de rendre un objet Date à l'aide d'un moteur de rendu personnalisé, alors pourquoi avez-vous multiples questions sur l'utilisation d'un calendrier quand une date fonctionne très bien?

Un calendrier a une méthode pour renvoyer la date du calendrier. Donc, c'est une ligne de code supplémentaire à votre autre moteur de rendu. C'est-à-dire que vous obtenez la date du calendrier et vous pouvez la formater de la même façon que l'autre code.