JTable设置模型并保留列格式(宽度,对齐等)

这是使用JTable绑定的大脑破解体验。 这就是我做的。 我创建了一个JTable ,其列设置为指定的宽度,使用renderers对其进行格式化,并在其上添加了一些代码。 但是当我尝试将其绑定到模型时,所有列都被模型的字段替换 。 有没有办法如何正确绑定它?

我正在避免循环,因为数据库中有超过100条记录。 我正在尝试使用其他方法,如BeansBindingEntityManager但我不知道如何更改数据源( 这就是我选择将其绑定到模型的原因),因为我正在测试这个备份数据库,很快就会实现新服务器。

这就是我在.Net所做的,我通常创建一个datagridview并将其绑定到数据集,它工作正常。 但我无法将其应用于java。 我需要你的意见,我怎么能在java中做到这一点,可以处理100多万条记录。

  PreparedStatement pst = conn.prepareStatement("SQL Query here"); ResultSet rs = pst.ExecuteQuery(); jTable1.setModel(DbUtils.resultSetToTableModel(rs)); 

上面的代码工作正常但我在这方面非常大的问题是它覆盖了我的格式化列的模型中的列。

请帮帮我。

根据注释,您可以尝试将以下方法添加到DbUtils:

 public static void updateTableModelData(DefaultTableModel tModel, ResultSet rs) throws Exception { tModel.setRowCount(0); ResultSetMetaData metaData = rs.getMetaData(); while (rs.next()) { Vector newRow = new Vector(); for (int i = 1; i <= numberOfColumns; i++) { newRow.addElement(rs.getObject(i)); } tModel.addRow(newRow); } } 

然后你的代码将成为:

 PreparedStatement pst = conn.prepareStatement("SQL Query here"); ResultSet rs = pst.ExecuteQuery(); DbUtils.updateTableModelData((DefaultTableModel) jTable1.getModel(), rs); 

问题太广了

1)从来没有,真的从来没有把100+ thousand records放到视图中,这对所有编程语言都有效,真的没用

2)(我的观点)BeansBindings是out_dated使用标准的TableModel代替

3)没有更好的@camickr TableFromDatabase ,或另一个建议是搜索ResultSetTableModel

我发现您可以创建格式化方法并在try块之后调用它,如下所示。

  private void UpdateTable() throws SQLException { String sql = "select * from invoice"; proDialog.setValue(10); table.setShowHorizontalLines(true); table.setShowVerticalLines(true); proDialog.setValue(20); try ( PreparedStatement pst = con.prepareStatement(sql); ResultSet rs = pst.executeQuery(); ) { table.setModel(DbUtils.resultSetToTableModel(rs)); } catch (Exception e) { JOptionPane.showMessageDialog(null, e); } format(); } public void format() { TableColumnModel m = table.getColumnModel(); m.getColumn(2).setCellRenderer(FormatRenderer.getDateTimeRenderer()); m.getColumn(1).setCellRenderer(FormatRenderer.getTimeRenderer()); m.getColumn(2).setCellRenderer(NumberRenderer.getPercentRenderer()); m.getColumn(4).setCellRenderer(NumberRenderer.getCurrencyRenderer()); m.getColumn(4).setCellRenderer(NumberRenderer.getPercentRenderer()); m.getColumn(5).setCellRenderer(NumberRenderer.getCurrencyRenderer()); } 

这将完美地工作