Précédent   Forum des professionnels en informatique > Java > Général Java
Général Java Java SE, Java ME, APIs, Persistance, JDBC, Spring, XML. Avant de poster -> FAQ Java, Sources Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2012, 10h31   #1
Invité régulier
 
Homme
Inscription : décembre 2011
Messages : 43
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 43
Points : 8
Points : 8
Par défaut Formattage de double pour jtable

Bonjour à tous,

je possède un jtable ayant une colonne contenant des doubles.

Afin de formatter l'affichage de mes doubles, j'utilise le formateur suivant :
Code :
1
2
 
formateur = new DecimalFormat("###,##0.00#", new DecimalFormatSymbols(java.util.Locale.FRENCH));
Dans la méthode getValueAt() de mon modèle, je retourne :

Code :
1
2
3
 
if(columnIndex == 3)
return formateur.format(Double.parseDouble(vect.elementAt(columnIndex))/100);
Le problème est que cette méthode retourne un String; je perds donc l'information du type de données pour ma colonne puisque je dois passer de Double à String :

Code :
1
2
3
4
5
6
7
8
 
public Class getColumnClass(int columnIndex)
	{
		if(columnIndex == 3)
			return String.class;
		else
			return Boolean.class;
	}

De plus, le tri sur les colonnes contenants des doubles ne s'effectue plus sur le type Double mais String ce qui me donne un ordre erroné.

Est-il possible de formatter une donnée tout en la laisssant en type double?

Merci d'avance.
nddvlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 11h02   #2
Modérateur
 
Avatar de dinobogan
 
Homme Dinobogan Shelashyn
ingénieur étude et développement
Inscription : juin 2007
Messages : 3 276
Détails du profil
Informations personnelles :
Nom : Homme Dinobogan Shelashyn
Âge : 31
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 3 276
Points : 4 886
Points : 4 886
Tu dois laisser le type Double dans la colonne.
C'est le Renderer qui s'occupe de formater l'affichage d'une colonne. Plus de détails sur le tutoriel officiel.
__________________
Que la force de la puissance soit avec le courage de ta sagesse.
dinobogan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2012, 11h34   #3
Invité régulier
 
Homme
Inscription : décembre 2011
Messages : 43
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 43
Points : 8
Points : 8
Merci pour l'information.

Afin de pouvoir utiliser un render commun pour l'ensemble de mes jtable, j'ai créé une classe implémentant TableCellRenderer comme suit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
public class RenderData_Double implements TableCellRenderer
{
	private DecimalFormat formateur = new DecimalFormat("###,##0.00#", new DecimalFormatSymbols(java.util.Locale.FRENCH));
 
	public Component getTableCellRendererComponent(JTable arg0, Object arg1,
			boolean arg2, boolean arg3, int arg4, int arg5) 
	{
		double value = (double)arg1;/*NE PASSE PAS*/
		return formateur.format(value);/*NE PASSE PAS*/
	}
 
}

Et je spécifique ensuite mon render pour toute les colonnes de doubles :

Code :
1
2
 
myTable.setDefaultRender(Double.class, new RenderData_Double());
mais mon problème est que la méthode getTableCellRendererComponent retourne un Component et ne passe donc pas avec un double. Une solution serait d'afficher un JLabel.setText(value) mais n'y a-t-il pas une autre solution?

Merci
nddvlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 12h04   #4
Membre émérite
 
Inscription : mai 2006
Messages : 787
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 787
Points : 837
Points : 837
Salut,

Comme indiqué sur le tutoriel officiel, il faut bien utiliser un composant pour afficher.
Pour cela, tu peux étendre un DefaultTableCellRenderer qui herite de JLabel puis faire un setText avec la valeur du double (grosso modo, faire la meme chose que sur le tutoriel avec les dates).

a+
hwoarang est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2012, 12h20   #5
Invité régulier
 
Homme
Inscription : décembre 2011
Messages : 43
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 43
Points : 8
Points : 8
Merci. En effet, ça fonctionne mieux comme ça

Merci à tous.
nddvlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h00.


 
 
 
 
Partenaires

Hébergement Web