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));

然后还有小数点和逗号的问题,先放着吧

尝试调试。