[英]JTable setting model and preserve column formats (width, alignment, etc.)
這是使用JTable
綁定的大腦破解體驗。 這就是我做的。 我創建了一個JTable
,其列設置為指定的寬度,使用renderers
對其進行格式化,並在其上添加了一些代碼。 但是當我嘗試將其綁定到模型時,所有列都被模型的字段替換 。 有沒有辦法如何正確綁定它?
我正在避免循環,因為數據庫中有超過100條記錄。 我正在嘗試使用其他方法,如BeansBinding
和EntityManager
但我不知道如何更改數據源( 這就是我選擇將其綁定到模型的原因),因為我正在測試這個備份數據庫,很快就會實現新服務器。
這就是我在.Net
所做的,我通常創建一個datagridview並將其綁定到數據集,它工作正常。 但我無法將其應用於java。 我需要你的意見,我怎么能在java中做到這一點,可以處理100多萬條記錄。
PreparedStatement pst = conn.prepareStatement("SQL Query here");
ResultSet rs = pst.ExecuteQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
上面的代碼工作正常,但我在這方面的一個非常大的問題是它覆蓋了我的格式化列的模型中的列。
請幫幫我。
問題太廣了
1)從來沒有,真的從來沒有把100+ thousand records
放到視圖中,這對所有編程語言都有效,真的沒用
2)(我的觀點)BeansBindings是out_dated使用標准的TableModel代替
3)沒有更好的@camickr TableFromDatabase ,或另一個建議是搜索ResultSetTableModel
根據注釋,您可以嘗試將以下方法添加到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);
我發現您可以創建格式化方法並在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());
}
這將完美地工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.