gpt4 book ai didi

java - Jtable 中的小数显示不正确

转载 作者:行者123 更新时间:2023-12-01 19:20:40 25 4
gpt4 key购买 nike

晚上好,

我有一个 JTable,其中包含 SQL 表中的数据。我在 SQL 表中有一列包含十进制值(例如 44.44),但在 JTable 中它显示为 44.00。因此,JTable(或输入字段)以某种方式将值四舍五入为最接近的整数(这是我不想要的)。

我尝试使用表格渲染器,但它没有给我想要的结果(或者我忽略了一些东西)

表格渲染器的代码:

static class DecimalFormatRenderer extends DefaultTableCellRenderer {
private static final DecimalFormat formatter = new DecimalFormat( "#,###.00" );

public Component getTableCellRendererComponent(
JTable pickTable, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {


Number number = (Number) value;
value = formatter.format((Number)value);


return super.getTableCellRendererComponent(
pickTable, value, isSelected, hasFocus, row, column );
}
}

此代码将日期从 SQL 表加载到 JTable 中:

private void LoadPickTable() {
ArrayList<Pick> pick = ListPick(pickFilterTxt1.getText());
DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(new Object[]{"ID", "ARTIKELCODE", "LOCATIE", "OMSCHRIJVING", "EENHEID", "CODE","HAL","AANTAL","INITIAAL"});
Object[] rij = new Object[9];
pickTable.setFont(new Font("Barlow", Font.PLAIN, 22));


for (int i = 0; i < pick.size(); i++) {
rij[0] = pick.get(i).getId();
rij[1] = pick.get(i).getArtiekelcode();
rij[2] = pick.get(i).getLocatie();
rij[3] = pick.get(i).getOmschrijving();
rij[4] = pick.get(i).getEenheid();
rij[5] = pick.get(i).getCode();
rij[6] = pick.get(i).getHal();
rij[7] = pick.get(i).getAantal();
rij[8] = pick.get(i).getInitiaal();
model.addRow(rij);
}

pickTable.setModel(model);
pickTable.getColumnModel().getColumn(7).setCellRenderer(new DecimalFormatRenderer());

}

我用来测试的输入字段是一个JComboBox(pickAantalCombo),代码:

private void ModifyPick() {

int row = pickTable.getSelectedRow();
String cell = pickTable.getModel().getValueAt(row, 0).toString();
String sql = "UPDATE PICKLOCATIES SET artikelcode=?,locatie=?,omschrijving=?, eenheid=?, hal=?, aantal=?, initiaal=? WHERE ID=" + cell;
try {
conn = getConnection();
pst = conn.prepareStatement(sql);
String code = (String) pickArticleCombo.getSelectedItem();
pst.setString(1, code);
String loc = (String) pickLocationCombo.getSelectedItem();
String hal = (String) halCombo.getSelectedItem();
String decimal = (String) pickAantalCombo.getSelectedItem();


pst.setString(1, code);
pst.setString(2, loc);
pst.setString(3, pickDescriptionTxt.getText());
pst.setString(4, eenheidTxt.getText());
pst.setString(5, hal);
pst.setString(6,decimal);
pst.setString(7, pickInitiaalTxt.getText());

pst.executeUpdate();
LoadPickTable();
ClearPickFields();
JOptionPane.showMessageDialog(null, "Artikel Aangepast!");

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

JTable 的屏幕截图:

JTable Screenshot

SQL 表的屏幕截图:

SQL Table Screenshot

输入字段中的输入值当然是44.44。

任何帮助将不胜感激。谢谢!

最佳答案

首先是另一个错误:每个表现在都需要自己的行对象,否则您将用最后一行的字段覆盖每一行的字段。

for (int i = 0; i < pick.size(); i++) {
Object[] rij = new Object[9];

您应该确保读取的数字不是整数。

rij[7] = (BigDecimal) pick.get(i).getAantal();

我怀疑 getAantal 会传递一个 int。

目前表字段似乎总是字符串:

        pst.setBigDecimal(6, new BigDecimal(decimal));

然后还有小数点与逗号的问题,但我就到此为止。

尝试调试。

关于java - Jtable 中的小数显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com