java - valor - Formateo de enteros en celdas de columnas JTable con comas
metodo getrowcount() java (3)
Debe crear un TableCellRenderer personalizado para esa columna, uno que use una instancia DecimalFormat, una que tenga el setDecimalSeparatorAlwaysShown(true)
invocado.
Tengo una columna Precio que muestra enteros en formato simple como 1000000. Me gustaría saber cómo puedo formatearlo con comas sin afectar su valor al recuperar con table.getValueAt ()?
¿Hay algún método como table.setColumnCellFormat (decimalFormat)?
Eche un vistazo a Renderizadores de formato de tabla .
Proporciona un ejemplo simple de cómo crear un renderizador personalizado anulando el setValue(...)
del renderizador.
O puede usar una de las clases proporcionadas que le permite crear fácilmente renderizadores reutilizables con diferentes formatos.
Necesita un TableCellRenderer
personalizado que pueda formatear el valor de la manera que lo necesite. Consulte Uso de procesadores personalizados para obtener más información.
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.text.NumberFormat;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
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() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
DefaultTableModel model = new DefaultTableModel(0, 1);
for (int index = 10000; index < 11000; index++) {
model.addRow(new Object[]{index});
}
JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(new NumberTableCellRenderer());
setLayout(new BorderLayout());
add(new JScrollPane(table));
}
public class NumberTableCellRenderer extends DefaultTableCellRenderer {
public NumberTableCellRenderer() {
setHorizontalAlignment(JLabel.RIGHT);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Number) {
value = NumberFormat.getNumberInstance().format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
}