Jtable 中的小数显示不正确
Decimals in Jtable not displaying correctly
晚上好,
我有一个 JTable,其中的数据来自 SQL table。我在 SQL table 中有一列带有十进制值(例如 44.44),但在 JTable 中它显示为 44.00。所以 JTable (或输入字段)以某种方式将值四舍五入为最接近的整数(这是我不想要的)。
我尝试使用 Table 渲染器,但它没有给我想要的结果(或者我忽略了一些东西)
table 渲染器的代码:
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 Table 加载到 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
SQLTable的截图:
SQL Table Screenshot
输入栏中的输入值当然是44.44。
我们将不胜感激任何帮助。谢谢!
首先是另一个错误:曾经 table 现在需要它自己的行对象,否则您将用最后一行的字段覆盖每一行的字段。
for (int i = 0; i < pick.size(); i++) {
Object[] rij = new Object[9];
请确保读取的数字不是整数。
rij[7] = (BigDecimal) pick.get(i).getAantal();
我怀疑 getAantal
传递一个整数。
目前 table 字段似乎总是字符串:
pst.setBigDecimal(6, new BigDecimal(decimal));
然后还有小数点和逗号的问题,先放着吧
尝试调试。
晚上好,
我有一个 JTable,其中的数据来自 SQL table。我在 SQL table 中有一列带有十进制值(例如 44.44),但在 JTable 中它显示为 44.00。所以 JTable (或输入字段)以某种方式将值四舍五入为最接近的整数(这是我不想要的)。
我尝试使用 Table 渲染器,但它没有给我想要的结果(或者我忽略了一些东西)
table 渲染器的代码:
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 Table 加载到 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
SQLTable的截图:
SQL Table Screenshot
输入栏中的输入值当然是44.44。
我们将不胜感激任何帮助。谢谢!
首先是另一个错误:曾经 table 现在需要它自己的行对象,否则您将用最后一行的字段覆盖每一行的字段。
for (int i = 0; i < pick.size(); i++) {
Object[] rij = new Object[9];
请确保读取的数字不是整数。
rij[7] = (BigDecimal) pick.get(i).getAantal();
我怀疑 getAantal
传递一个整数。
目前 table 字段似乎总是字符串:
pst.setBigDecimal(6, new BigDecimal(decimal));
然后还有小数点和逗号的问题,先放着吧
尝试调试。