为什么我的 JTable 对整数排序不正确?
Why does my JTable sort integers incorrectly?
我的 JTable 将整数排序为 1、10、100、101。看起来它仍在将其排序为字符串。我看过类似的问题并尝试根据需要进行调整。我错过了什么吗?如果有任何改变,我已经使用 netbeans GUI 创建器创建了它。我也在使用方法
listSubTable.setModel(DbUtils.resultSetToTableModel(rs));
在代码的另一部分。这会将结果集发送到 table。这是否优先于下面的代码。我将 switch 语句更改为所有整数,以防我混淆列。它仍然将它们列为字符串。
listSubTable = new javax.swing.JTable(){
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}
};
listSubTable.setAutoCreateRowSorter(true);
listSubTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1 && isSubdivision()) {
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
if (listSubTable.getSelectedRow() != -1) {
row = listSubTable.getSelectedRow();
archiveNameField.setText("PTC_" + listSubTable.getModel().getValueAt(row, column).toString() + "-V");
}
}
if (e.getClickCount() == 1 && !isSubdivision()) {
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
if (listSubTable.getSelectedRow() != -1) {
row = listSubTable.getSelectedRow();
archiveNameField.setText("");
}
}
}
});
listSubTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [] [] {},
new Integer [] {
})
{@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Integer.class;
case 1:
return Integer.class;
case 2:
return Integer.class;
default:
return Integer.class;
}
}}
);
listSubTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_NEXT_COLUMN);
listSubTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
listSubTableMouseClicked(evt);
}
});
jScrollPane3.setViewportView(listSubTable);
看起来问题出在以下行:
listSubTable.setModel(DbUtils.resultSetToTableModel(rs));
它一定是以字符串形式获取所有内容。我将其替换为以下内容。
ResultSet rs = stmt.executeQuery(sql);
while (listSubTable.getRowCount() > 0) {
((DefaultTableModel) listSubTable.getModel()).removeRow(0);
}
int obColumns = rs.getMetaData().getColumnCount();
System.out.println("obColumns: " + obColumns);
while (rs.next()) {
Object[] obRow = new Object[obColumns];
obRow[0] = rs.getString(1);
obRow[1] = rs.getInt(2);
System.out.println(obRow[0]);
System.out.println(obRow[1]);
((DefaultTableModel)listSubTable.getModel()).insertRow(rs.getRow() - 1, obRow);
}
我的 JTable 将整数排序为 1、10、100、101。看起来它仍在将其排序为字符串。我看过类似的问题并尝试根据需要进行调整。我错过了什么吗?如果有任何改变,我已经使用 netbeans GUI 创建器创建了它。我也在使用方法
listSubTable.setModel(DbUtils.resultSetToTableModel(rs));
在代码的另一部分。这会将结果集发送到 table。这是否优先于下面的代码。我将 switch 语句更改为所有整数,以防我混淆列。它仍然将它们列为字符串。
listSubTable = new javax.swing.JTable(){
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}
};
listSubTable.setAutoCreateRowSorter(true);
listSubTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1 && isSubdivision()) {
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
if (listSubTable.getSelectedRow() != -1) {
row = listSubTable.getSelectedRow();
archiveNameField.setText("PTC_" + listSubTable.getModel().getValueAt(row, column).toString() + "-V");
}
}
if (e.getClickCount() == 1 && !isSubdivision()) {
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
if (listSubTable.getSelectedRow() != -1) {
row = listSubTable.getSelectedRow();
archiveNameField.setText("");
}
}
}
});
listSubTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [] [] {},
new Integer [] {
})
{@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Integer.class;
case 1:
return Integer.class;
case 2:
return Integer.class;
default:
return Integer.class;
}
}}
);
listSubTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_NEXT_COLUMN);
listSubTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
listSubTableMouseClicked(evt);
}
});
jScrollPane3.setViewportView(listSubTable);
看起来问题出在以下行:
listSubTable.setModel(DbUtils.resultSetToTableModel(rs));
它一定是以字符串形式获取所有内容。我将其替换为以下内容。
ResultSet rs = stmt.executeQuery(sql);
while (listSubTable.getRowCount() > 0) {
((DefaultTableModel) listSubTable.getModel()).removeRow(0);
}
int obColumns = rs.getMetaData().getColumnCount();
System.out.println("obColumns: " + obColumns);
while (rs.next()) {
Object[] obRow = new Object[obColumns];
obRow[0] = rs.getString(1);
obRow[1] = rs.getInt(2);
System.out.println(obRow[0]);
System.out.println(obRow[1]);
((DefaultTableModel)listSubTable.getModel()).insertRow(rs.getRow() - 1, obRow);
}