IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Probleme avec Renderer sur colonne Date


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Probleme avec Renderer sur colonne Date
    Bonjour,

    Je me trouve face à un petit soucis. Lorsque j'affiche ma jtable, si dans une colonne ayant une classe Date, la première valeur est nulle ou chaine vide, le renderer n'est pas appliqué. J'ai donc "";"";"";"";"";"Wed Mar 17 00:00:00 CET 2004" qui s'affiche.

    C'est bof comme résultat. Quelqu'un pourrait-il m'expliquer comment éviter ceci.
    J'ai essayé de parcourir les lignes si la cellule est vide ou nulle mais ca foire complètement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class DateCellRenderer extends DefaultTableCellRenderer {
     
        private SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yy");
     
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if((value=="")||(value==null)){
                setText("");
            }else{
             setText(formatDate.format(value));
             System.out.println(value + " - " + this.getText());
            }
            return this;
        }
    }
    Je tiens à préciser que les headers sont créer en parcourant la classe de la liste des données.
    voici la méthode de mise à jour du JFrame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     public void update(List<Affaire> listAffaire) {
            TableModelPerso modeleTable = null;
            if ((listAffaire == null)||(listAffaire.isEmpty())) {
                modeleTable = new TableModelPerso(Affaire.class);
            } else {
                modeleTable = new TableModelPerso(listAffaire);
            }
            this.tableAffaire.setModel(modeleTable);
            DateCellRenderer dateRenderer= new DateCellRenderer();
            this.tableAffaire.setDefaultRenderer(Date.class, dateRenderer);
            this.scrllAffaires.revalidate();
            this.repaint();
        }
    Merci d'avance

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par touftouf57 Voir le message
    si dans une colonne ayant une classe Date, la première valeur est nulle ou chaîne vide, le renderer n'est pas appliqué.
    Je devine que dans la méthode "getColumnClass" de ton TableModelPerso tu renseigne la classe sur base du contenu.
    Il faudrait modifier ça pour renseigner la classe de la colonne sur base du "columnIndex".

    Autre chose: dans "update" tu crée chaque fois un nouveau "DateCellRenderer", alors qu'un seul suffit (*).
    Les "revalidate" et "repaint" sont également superflus. La méthode "setModel" s'occupe déjà de ces choses.

    (*) Oui, si la méthode "update" n'est appelée qu'une seule fois, alors c'est bon. Mais dans ce cas le nom "update" est mal choisi, à mon avis.

  3. #3
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    Merci beaucoup,
    J'ai tout revu, ca fonctionne.

    Le seul truc qu'il me manque, c'est de pouvoir récupérer la classe T d'élément d'arrayList, ArrayList<T> maListe. Comme ça j'aurais un TableModelPerso générique comme je le souhaite.

    Aurais-tu une idée?

    Encore merci.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par touftouf57 Voir le message
    Le seul truc qu'il me manque, c'est de pouvoir récupérer la classe T d'élément d'arrayList, ArrayList<T> maListe. Comme ça j'aurais un TableModelPerso générique comme je le souhaite.
    Il suffit de conserver le type à coté de ta liste via un Class<?> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class TableModelPerso<T> extends AbstractTableModel {
     
    	private final Class<T> type;
    	private final List<T> list;
     
    	public TableModelPerso(Class<T> type) {
    		if (type==null) throw new NullPointerException("type");
    		this.type = type;
    		this.list = new ArrayList<T>();
    	}
    a++

  5. #5
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par touftouf57 Voir le message
    Le seul truc qu'il me manque, c'est de pouvoir récupérer la classe T d'élément d'arrayList, ArrayList<T> maListe. Comme ça j'aurais un TableModelPerso générique comme je le souhaite.
    Aurais-tu une idée?
    RowTableModel est un exemple qui va t'inspirer, je crois.

Discussions similaires

  1. [AC-2007] Probleme avec Findfirst sur une Date
    Par Alex_42 dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/07/2014, 14h59
  2. Réponses: 1
    Dernier message: 23/04/2012, 11h57
  3. [XL-2003] Filtre sur colonne date avec combobox
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2012, 18h52
  4. Probleme double clic sur colonne avec MsFlexgrid
    Par skywalker48 dans le forum IHM
    Réponses: 1
    Dernier message: 22/01/2009, 14h31
  5. [GTK]problème avec GTK+ sur DEV-C++
    Par afrikha dans le forum Dev-C++
    Réponses: 7
    Dernier message: 01/10/2005, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo