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 :

Comment insérer une valeur en pourcentage dans une table


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 24
    Points : 18
    Points
    18
    Par défaut Comment insérer une valeur en pourcentage dans une table
    bonjour tout le monde, ca va?
    est ce que je peux savoir comment inserer une valeur en pourcentage dans une table et comment la recuperer ?
    est je dois definir la colonne en format pourcentage ?
    et merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On peut afficher n'importe quelle valeur dans une JTable : il suffit de la mettre dans la bonne colonne du modèle, avec le type adéquat. Ensuite, pour l'afficher il suffit de la formatter.

    Par exemple, un pourcentage peut s'exprimer de différentes manières du point du vue type : un int par exemple, de 0 à 100. Mais aussi un double, de 0 à 1.
    Ensuite pour formatter, tout dépend comment on veut l'afficher.

    Par exemple, on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NumberFormat percentFormat = NumberFormat.getPercentInstance();
    percentFormat.setMaximumFractionDigits(1); 
     
    double value = 0.4266; // 57 % 
     
    System.out.println( percentFormat.format(value));
    pour avoir comme résultat :
    42,7 %
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DecimalFormat percentFormat = new DecimalFormat("#0.##%");
     
    double value = 0.4266; // 57 % 
     
    System.out.println( percentFormat.format(value));
    pour avoir comme résultat :
    42,66%
    Pour mettre la valeur dans la JTable, et pouvoir les saisir (les éditer), il faut lui affecter un modèle (DefaultTableModel), en précisant que la colonne qui contient les pourcentages contient du Double (si le pourcentage est typé ainsi) : on peut procéder en rédéfinissant la méthode getColumnClass(int columnIndex).

    Par exemple, s'il y a 2 colonnes de données, une première en String, et une seconde en Double :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
    public Class<?> getColumnClass(int columnIndex) {
       Class<?> klass = Object.class;
       switch(columnIndex) {
            case 0: 
                klass = String.class;
                break;
            case 1: 
                klass = Double.class;
                break;
       }
       return klass;
    }
    Ensuite, il suffit d'affecter un TableCellRenderer qui formatte comme voulue la valeur, par exemple :
    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
    public class PercentRenderer extends DefaultTableCellRenderer {
     
           private final static NumberFormat PERCENT_FORMAT;
           static {
                NumberFormat percentFormat = NumberFormat.getPercentInstance();
                percentFormat.setMaximumFractionDigits(1); 
                PERCENT_FORMAT = percentFormat;
           }
     
            @Override
            protected void setValue(Object value)
            {
                if ( value==null ) {
                   setText("");
                }
                else {
                   setText(PERCENT_FORMAT.format(value));
                }
            }
        }
    Puis de l'associer à la classe, pour la JTable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table.setDefaultRenderer(Double.class, new PercentRenderer());
    Pour l'édition également il faut mettre en place un éditeur qui formatte et saisie en pourcentage, en utilisant également le même format (ou pas) : on utilise pour ça un TableCellEditor.
    Par exemple :

    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
    public class PercentCellEditor extends AbstractCellEditor implements TableCellEditor {
     
    	 private final static NumberFormat PERCENT_FORMAT;
         static {
              NumberFormat percentFormat = NumberFormat.getPercentInstance();
              percentFormat.setMaximumFractionDigits(1); 
              PERCENT_FORMAT = percentFormat;
         }
     
    	  JComponent component = new JFormattedTextField(PERCENT_FORMAT);
     
    	  @Override
    	  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
    	      int rowIndex, int vColIndex) {
     
    	    ((JFormattedTextField) component).setValue(value);
     
    	    return component;
    	  }
     
    	  public Object getCellEditorValue() {
    	    return ((JFormattedTextField) component).getValue();
    	  }
     
    }
    Puis de l'associer au type, comme pour le TableCellRenderer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setDefaultEditor(Double.class, new PercentCellEditor());
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup pour la reponse

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  2. Réponses: 2
    Dernier message: 06/05/2008, 10h52
  3. Insérer une valeur déjà existante dans une Primary Key
    Par Gosth35 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/12/2007, 23h20
  4. insérer une valeur 'max + 1' dans une table
    Par pierre.egaud dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 15h00
  5. Comment récupérer la valeur de Expr1 dans une requête ?
    Par Tchupacabra dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 15h16

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