Newsgroup: it.comp.java
Titolo: formattazione cella jtable

Salve a tutti,
dovrei formattare una cella di una tabella come se fosse il prezzo.
io nel database lo salvo come double e quindi avrei poi bisogno di
visualizzarlo nella cella nel seguente modo
1.000,00 qundi sia col punto che con due 00 eventualmente dopo la
virgola.
Ho usato il seguente codice ma non mi va
TableColumn col=tblArticoli.getColumn("prezzo_acquisto");
				col.setCellRenderer(new DefaultTableCellRenderer(){
					DecimalFormat numberFormatter;
					Double d ;
					    public void setValue(Object value) {
					        if (numberFormatter==null) {
					        	d = (Double) value;
								numberFormatter = new DecimalFormat("#,##0.00");
								numberFormatter.setMaximumFractionDigits(2);
								numberFormatter.setMinimumFractionDigits(2);
					        }
					        setText((value == null) ? "" :
numberFormatter.format(d));
					    }
				});
posto anche qui sotto l'intera parte di codice dove creo la tabella
per intero.
In cosa sbaglio?
Grazie.
ArticoloModel modello = new ArticoloModel(dbm);
				dbm.addDBStateChange(modello);
				sorter=new TableRowSorter<ArticoloModel>(modello);
				tblArticoli = new JTable(modello);
				tblArticoli.setRowSorter(sorter);
				//
tblArticoli.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
				tblArticoli.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
				//tblArticoli.packAll();
				tblArticoli.getTableHeader().setReorderingAllowed(false);
				TableColumn col=tblArticoli.getColumn("prezzo_acquisto");
				col.setCellRenderer(new DefaultTableCellRenderer(){
					DecimalFormat numberFormatter;
					Double d ;
					    public void setValue(Object value) {
					        if (numberFormatter==null) {
					        	d = (Double) value;
								numberFormatter = new DecimalFormat("#,##0.00");
								numberFormatter.setMaximumFractionDigits(2);
								numberFormatter.setMinimumFractionDigits(2);
					        }
					        setText((value == null) ? "" :
numberFormatter.format(d));
					    }
				});
				col=tblArticoli.getColumn("prezzo_listino");
				col.setCellRenderer(new DefaultTableCellRenderer(){
					DecimalFormat numberFormatter;
					Double d ;
					    public void setValue(Object value) {
					        if (numberFormatter==null) {
					        	d = (Double) value;
								numberFormatter = new DecimalFormat("#,##0.00");
								numberFormatter.setMaximumFractionDigits(2);
								numberFormatter.setMinimumFractionDigits(2);
					        }
					        setText((value == null) ? "" :
numberFormatter.format(d));
					    }
				});
//				 impostiamo le varie colonne
				col = tblArticoli.getColumnModel().getColumn(0);
				col.setMinWidth(0);
				col.setMaxWidth(0);
				col.setPreferredWidth(0);
				col = tblArticoli.getColumn("codice");
				DefaultTableCellRenderer colFormatoRenderer = new
DefaultTableCellRenderer();
				colFormatoRenderer.setHorizontalAlignment(JLabel.LEFT);
				col.setCellRenderer(colFormatoRenderer);
				col.setMinWidth(0);
				col.setMaxWidth(150);
				col.setPreferredWidth(150);
				col = tblArticoli.getColumn("descrizione");
				DefaultTableCellRenderer ColTipoRenderer = new
DefaultTableCellRenderer();
				ColTipoRenderer.setHorizontalAlignment(JLabel.LEFT);
				col.setCellRenderer(ColTipoRenderer);
				col = tblArticoli.getColumn("prezzo_acquisto");
				DefaultTableCellRenderer prezzoColumnRenderer = new
DefaultTableCellRenderer();
				prezzoColumnRenderer.setHorizontalAlignment(JLabel.RIGHT);
				col.setCellRenderer(prezzoColumnRenderer);
				col.setMinWidth(0);
				col.setMaxWidth(100);
				col.setPreferredWidth(100);
				col = tblArticoli.getColumn("prezzo_listino");
				DefaultTableCellRenderer prezzoListinoColumnRenderer = new
DefaultTableCellRenderer();
				prezzoListinoColumnRenderer.setHorizontalAlignment(JLabel.RIGHT);
				col.setCellRenderer(prezzoListinoColumnRenderer);
				col.setMinWidth(0);
				col.setMaxWidth(100);
				col.setPreferredWidth(100);
				col = tblArticoli.getColumn("fornitore");
				DefaultTableCellRenderer fornitoreRenderer = new
DefaultTableCellRenderer();
				fornitoreRenderer.setHorizontalAlignment(JLabel.LEFT);
				col.setCellRenderer(fornitoreRenderer);
				col.setMinWidth(0);
				col.setMaxWidth(250);
				col.setPreferredWidth(250);

     }
dacci un'occhiata se ha senso e magari fammi sapere ^^
Saluti
CarMas

 ha scritto nel messaggio

Ho risolto il problema sbagliavo in una 
fesseria.il
 metodo di sopra
funziona alla perfezione
l'unica cosa che il cast a Double lo devo mettere fuori e non dentro
la creazione del formatter.
In più ora ho modificato il codice in quest'altro modo che è molto più
semplice ed in più appare anche
il segno dell'euro..
Ciao e grazie a tutti.
TableColumn col=tblArticoli.getColumnModel().getColumn(3);
				col.setCellRenderer(new DefaultTableCellRenderer(){
					DecimalFormat numberFormatter;
					Double d ;
					    public void setValue(Object value) {
					        if (numberFormatter==null) {
					        	numberFormatter=(DecimalFormat)
DecimalFormat.getCurrencyInstance(Locale.ITALY);
					        }
					        setHorizontalAlignment(JLabel.RIGHT);
					        d = (Double) value;
					        setText((value == null) ? "" :
numberFormatter.format(d));
					    }
				});

 la creazione del formatter.
c.v.d. :D
Saluti
CarMas

 ha scritto nel messaggio

beh ora ho un altro problema...sono riuscito a formattare senza
problemi i prezzi con il codice sopra solo che ho notato che quando
faccio l'ordinamento della colonna non lo mette in ordine di double ma
bensì usa un ordinamento di tipo stringa...faccio un esempio:
se ho 0,90 20,00 e 100,00 lui effettua l'ordinamento in questo modo
0,90 - 100,00 - 20,00 quindi come potrei fare per dirgli come ordinare
in modo corretto questa colonna?
Grazie.