2010-05-05 7 views
0

J'ai une table:Java Swing: Comment ajouter un CellRenderer pour afficher une date?

public class AppointmentTableModel extends AbstractTableModel { 
    private int columns; 
    private int rows; 
    ArrayList<Appointment> appointments;... 

Donc, chaque ligne de la table contient un rendez-vous.

public class Appointment { 

    private Date date; 
    private Sample sample; 
    private String comment; 
    private ArrayList<Action> history; 

    public Appointment(Date date, Sample sample, String comment) { 
     this.date = date; 
     this.sample = sample; 
     this.comment = comment; 
     this.history = new ArrayList<Action>(); 
    } 

    public Object getByColumn(int columnIndex) { 
     switch (columnIndex) { 
     case 0: return date;//Date: dd:mm:yyyy 

     case 1: return date;//Time mm:hh 

     case 2: return sample;//sample.getID() int (sampleID) 

     case 3: return sample;//sample.getNumber string (telephone number) 

     case 4: return sample;//sample.getName string (name of the person) 

     case 5: return history;//newst element in history as a string 

     case 6: return comment;//comment as string 


     } 
     return null; 

J'ai ajouté dans les commentaires ce que cela va signifier. Comment créer CellRenderers pour l'afficher comme ceci.

table.getColumnModel().getColumn(1).setCellRenderer(new DateRenderer()); 

Je souhaite également ajouter la ligne entière à peindre en rouge lorsque la date est postérieure à la date actuelle. Et puis une autre colonne qui contient un JButton pour ouvrir un autre écran avec le rendez-vous correspondant en tant que paramètre.

Répondre

0

Voir Table Format Renderers pour le rendu d'une date. Voir Table Row Rendering pour mettre en surbrillance une ligne basée sur la valeur d'une cellule.

Edit:

Voilà comment je créé les données pour la table dans l'entrée de blog:

String[] columnNames = {"Date/Time", "Time", "Percent", "Currency"}; 
Object[][] data = 
{ 
    {new Date(108, 0, 10), new Date(), new Double(.10), new Double(00075.25) }, 
    {new Date(108, 1, 15), new Date(), new Double(.50), new Double(01275.75) }, 
    {new Date(108, 2, 20), new Date(), new Double(.99), new Double(-4275.00) } 
}; 

Comme vous pouvez le voir sur l'image de blog, lorsque vous stockez un objet Date dans le modèle qu'il est formaté correctement avec la date ou l'heure spécifiée. Oubliez votre vrai programme et créez un SSCCE avec les données ci-dessus et prouvez-vous que le concept fonctionne. Ensuite, déterminez ce que vous avez mal fait avec votre vrai code.

+0

J'ai fait ce que vous avez dit pour le rendu de format. Mais maintenant, ma cellule contient la date actuelle et non la date des données. – HansDampf

+0

Ensuite, vous l'avez fait mal. Un moteur de rendu ne peut afficher que les données de TableModel. – camickr

Questions connexes