【问题标题】:Decimals in Jtable not displaying correctlyJtable 中的小数点显示不正确
【发布时间】:2019-12-16 15:09:06
【问题描述】:

晚上好,

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

我尝试使用 Table Renderer,但它没有给我想要的结果(或者我忽略了一些东西)

表格渲染器代码:

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

    }

我用来测试的 Input 字段是一个 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。

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

【问题讨论】:

  • Pick中的getAantal()方法的返回类型是什么?
  • 它出现在您的 DecimalFormatRenderer 类中,您正在将值转换为数字 Number number = (Number) value;,仅此一项就会从您的值中删除小数点,将变量编号保留为 44,并且当您应用格式化程序时, 你得到 44.00
  • @Cujoey Casting 不会更改对象。如果之前是 Double、Float 或 BigDecimal,则强制转换不会改变这一事实。

标签: java swing jtable decimal


【解决方案1】:

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

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

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

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

我怀疑 getAantal 提供了一个 int。

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

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

那么还是有小数点和逗号的问题,不过我还是留在这里吧。

尝试调试。

【讨论】:

  • 感谢大家的反馈,我去看看
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多