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

Interfaces Graphiques en Java Discussion :

surcharge du processeur a cause d'un cellrenderer!


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut surcharge du processeur a cause d'un cellrenderer!
    Salut,
    j'ai étendue un DefaultTableCellRenderer pour que je puisse colorer les cellue de la table selon une condition ,ça fonctionne bien mais ça surcharge le processeur !
    En enlevant le renderer tout rentre en ordre et en ajoutant un affichage dans le renderer j'ai remarqué qu'il est appelé tout le temps meme si ma table est inactive !
    Que faire ?
    Merci.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     private class MyCellRenderer extends DefaultTableCellRenderer {
     
     
            private int L,  C;
            private DefaultTableModel data = null;
            private Integer stockFinal;
            private Integer stockMax;
     
            private DecimalFormat df;
            private Double pourcentageD;
            private String pourcentage;
     
            public MyCellRenderer(int ligne, int colonne) {
                super();
                L = ligne;
                C = colonne;
            }
     
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                data = (DefaultTableModel) table.getModel();
     
     
                if (column == C) {
     
                    stockFinal = (Integer) data.getValueAt(row, 2);
                    stockMax = (Integer) data.getValueAt(row, 3);
     
                    df = new DecimalFormat("########.00");
     
     
                    pourcentageD = (stockFinal.doubleValue() / stockMax.doubleValue()) * 100;
     
                    pourcentage = df.format(pourcentageD).toString() + "%";
     
                    data.setValueAt(pourcentage, row, 6);
     
                    if (stockFinal == 0) {
     
                        setBackground(noir);
                        setForeground(Color.WHITE);
     
                    }  else {
                    setBackground(Color.WHITE);
     
                }
                super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                return this;
            }
        }
    et voila comment je l'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      jTableTest.setDefaultRenderer(String.class, new MyCellRenderer(0, 3));

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut
    Je pense que ton erreur vient de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.setValueAt(pourcentage, row, 6);
    tu mets à jour le modèle et cela doit mettre à jour la table. Cela a pour effet de rafraichir la table, qui va rappeler le renderer, etc. Ca boucle !

    Si tu veux afficher, il te suffit de mettre à jour le composant graphique, inutile de mettre à jour le modèle...
    Tu peux essayer de remplacer la ligne par :
    et ça devrait soulager ton processeur !

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    +1 le renderer n'a pas a tripatouiller le modèle de la table, il a déjà recu (value) la valeur à afficher

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    j'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.setValueAt(pourcentage, row, 6);
    par , la charge du pros est normale mais le texte ne s'affiche plus !

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu as bien mis le setText après l'appel super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); ?

  6. #6
    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,


    Je rajouterais également quelques remarques concernant ton code :

    • Les attributs L & C ne servent à rien : tu n'utilises pas L, et C peut être remplacé en appliquant le cellrenderer sur une colonne :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      table.getColumnModel().getColumn(3).setCellRenderer(new MyCellRenderer());
    • Les attributs data, stockFinal, stockMax, pourcentageD et pourcentage sont utilisé comme des variables locales, et change de valeur à chaque appel getTableCellRendererComponent(). Il serait préférable d'utiliser des variables locale !
    • L'attribut df est lui un vrai attribut, qui pourrait rester pendant toute la durée de vie de l'instance. Mais tu l'utilises comme une variable locale
      Il serait préférable de le créer une fois pour toute :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       private final DecimalFormat df = new DecimalFormat("########.00");



    Enfin, quel est l'objectif de ton renderer ???
    Car j'ai vraiment du mal à comprendre ce que tu veux faire !

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Serveur surchargé - perdu pour trouver la cause
    Par ygrim dans le forum Outils
    Réponses: 4
    Dernier message: 07/09/2007, 15h20
  2. CellRenderer utilisation processeur
    Par theyankee76 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/12/2006, 13h41
  3. Processeur
    Par delire8 dans le forum C++Builder
    Réponses: 14
    Dernier message: 05/09/2002, 13h33
  4. swapping entre processeurs
    Par shef dans le forum MFC
    Réponses: 5
    Dernier message: 26/08/2002, 14h20
  5. Réponses: 9
    Dernier message: 12/08/2002, 07h38

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