JTable come posso mostrare i numeri nel formato (# .00) nella classe a doppia colonna?
Il mio modello JTable
DefaultTableModel modelim = new DefaultTableModel() {
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Integer.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return Date.class;
case 5:
return Double.class;
default:
return String.class;
}
}
};
Ho un JTable. La colonna 5 è per i numeri doppi. Per esempio.
1234.25
177.12
1745.02
1748.10
1899.00
Questi sono gli elementi della colonna 5. Ma quando avvio il programma hanno questo aspetto.
1234.25
177.12
1745.02
1748.1 //different
1899.0 //different
Quindi mostra almeno 1 numero dopo il punto. Ma voglio vedere il numero con 2 nubmer dopo il punto.
1748.10
1899.00
Come questo. Posso condividere più codice se ne avete bisogno.
Risposte
Usa un renderer di celle personalizzato. Vedere Come usare le tabelle e Usare i renderizzatori personalizzati


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.text.NumberFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new BorderLayout());
JTable table = new JTable();
DefaultTableModel modelim = new DefaultTableModel() {
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Integer.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return Date.class;
case 5:
return Double.class;
default:
return String.class;
}
}
@Override
public int getColumnCount() {
return 6;
}
};
modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 1.234567});
modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 2.345678});
modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 3.456789});
modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 4.567890});
modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 5.678901});
modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 6.789012});
table.setAutoCreateRowSorter(true);
table.setModel(modelim);
table.getColumnModel().getColumn(5).setCellRenderer(new DoubleFormatTableCellRenderer());
add(new JScrollPane(table));
}
}
public class DoubleFormatTableCellRenderer extends DefaultTableCellRenderer {
private NumberFormat numberFormat;
public NumberFormat getNumberFormat() {
if (numberFormat == null) {
numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(2);
}
return numberFormat;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Double) {
value = getNumberFormat().format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
ne uso uno. Era ok ma quando provo a ordinare i numeri non lo ordino correttamente. Quindi devo usare la classe Double column per ordinarli correttamente. Ma dopo aver usato la classe Double column i numeri sono diventati come questo
La prossima volta, fornisci un esempio riproducibile minimo : eviterà che l'uso venga eseguito su un terreno che potresti essere già andato e / o vedrai perché la tua soluzione non ha funzionato