java - JTable - DefaultTableCellRenderer - getCurrencyInstance()
问题描述
我想将第 2 列(Columna 2)的格式更改为所有数据的货币格式,我正在尝试这样做,但它没有做任何事情。你可以帮帮我吗?
这些是我的数据:
我希望数据像这样出来:
使用此代码,我正在尝试:
public class CurrencyCellRenderer extends DefaultTableCellRenderer {
@Override
public final Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
final Component result = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (value instanceof Number) {
setHorizontalAlignment(JLabel.CENTER);
setText(defaultFormat.format(value));
} else {
setText("NO");
}
return result;
}
}
jTable1.getColumnModel().getColumn(2).setCellRenderer(new CurrencyCellRenderer());
它什么也没做,你能帮帮我吗?谢谢!!!
解决方案
您需要在更改值的值result
后创建。之前创建结果,只会返回相同的旧数据。
例如,
private class CurrencyCellRenderer extends DefaultTableCellRenderer {
@Override
public final Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null) {
value = 0.0;
}
value = myFormat.format(value);
final Component result = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
return result;
}
}
我的 MCVE 用于概念验证:
import java.awt.BorderLayout;
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class CurrencyTable extends JPanel {
private static final String[] TABLE_HEADERS = { "Text", "Value" };
private static final Object[][] DATA = { { "Foo", 1.1 }, { "Bar", 2.2 }, { "Bax", 3.3 } };
private DefaultTableModel tableModel = new DefaultTableModel(DATA, TABLE_HEADERS);
private JTable table = new JTable(tableModel);
private NumberFormat myFormat = NumberFormat.getCurrencyInstance(Locale.FRANCE);
public CurrencyTable() {
table.getColumnModel().getColumn(1).setCellRenderer(new CurrencyCellRenderer());
setLayout(new BorderLayout());
add(new JScrollPane(table));
}
private class CurrencyCellRenderer extends DefaultTableCellRenderer {
@Override
public final Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null) {
value = 0.0;
}
value = myFormat.format(value);
final Component result = super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
return result;
}
}
private static void createAndShowGui() {
CurrencyTable mainPanel = new CurrencyTable();
JFrame frame = new JFrame("CurrencyTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
推荐阅读
- reactjs - 在 Jest 中模拟 URQL 的获取状态
- c# - 将数组从 VBA 传递到 C# DLL(使用 DllExport 公开)
- mysql - MariaDB 使用主机名创建用户
- python - 将pdf文件从docx2pdf上传到python中的数据库表
- html - 溢出:自动无法按预期使用位置:粘性
- spring-cloud-sleuth - 如何强制 Zipkin/Brave/Spring-Cloud-Sleuth 跨度可导出?
- python-3.x - Pyspark 数据框内部联接第二次不起作用
- javascript - 在 Shopify js 文件中获取和使用商品 ID
- excel - 使用 VBA 将包含引号的字符串发送到文件
- r - 采样数据框保持所有级别的因子变量