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:)
Version imprimable
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:)
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 :
pour avoir comme résultat :Code:
1
2
3
4
5
6 NumberFormat percentFormat = NumberFormat.getPercentInstance(); percentFormat.setMaximumFractionDigits(1); double value = 0.4266; // 57 % System.out.println( percentFormat.format(value));
OuCitation:
42,7 %
pour avoir comme résultat :Code:
1
2
3
4
5 DecimalFormat percentFormat = new DecimalFormat("#0.##%"); double value = 0.4266; // 57 % System.out.println( percentFormat.format(value));
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).Citation:
42,66%
Par exemple, s'il y a 2 colonnes de données, une première en String, et une seconde en Double :
Ensuite, il suffit d'affecter un TableCellRenderer qui formatte comme voulue la valeur, par exemple :Code:
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; }
Puis de l'associer à la classe, pour la JTable :Code:
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)); } } }
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.Code:
1
2 table.setDefaultRenderer(Double.class, new PercentRenderer());
Par exemple :
Puis de l'associer au type, comme pour le TableCellRenderer :Code:
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(); } }
Code:table.setDefaultEditor(Double.class, new PercentCellEditor());
Merci beaucoup pour la reponse;)