Java 为什么我的JTable对整数排序不正确?
我的JTable将整数排序为1、10、100、101。它看起来仍在按字符串排序。我已经研究过类似的问题,并在必要时进行了调整。我错过了什么吗。我已经使用netbeans GUI创建者创建了它,如果它改变了什么。我也在用这个方法Java 为什么我的JTable对整数排序不正确?,java,swing,jtable,Java,Swing,Jtable,我的JTable将整数排序为1、10、100、101。它看起来仍在按字符串排序。我已经研究过类似的问题,并在必要时进行了调整。我错过了什么吗。我已经使用netbeans GUI创建者创建了它,如果它改变了什么。我也在用这个方法 listSubTable.setModel(DbUtils.resultSetToTableModel(rs)); 在代码的另一部分中。这会将结果集发送到表中。这是否优先于下面的代码。我把switch语句改为all integer,以防我弄糊涂了。它仍然将它们列为字符串
listSubTable.setModel(DbUtils.resultSetToTableModel(rs));
在代码的另一部分中。这会将结果集发送到表中。这是否优先于下面的代码。我把switch语句改为all integer,以防我弄糊涂了。它仍然将它们列为字符串
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);
}
添加一个带有比较器的分拣机进行数值比较:它在那里,但仍然不起作用。我忘了把它放回我找到的地方。我在移动那条线,看看它是否有不同。我把它放回了上面第7行原来的位置。我现在可以从你发布的代码中删除不必要的混乱,并创建一个新的代码,但我确信它将“为我工作”。尝试创建一个,您的问题很可能会很快得到解决。我一直担心
DbUtils.resultsetTableModel(rs)
,因为您不知道它实际上在做什么,或者它如何从ResultSet
提取数据-可能使用getString
-它也在创建自己的TableModel
,因此,您无法控制它如何表示数据-最好是自行开发功能,您可以执行listSubTable.setModel(DbUtils.resultsettablemodel(rs))
然后执行listSubTable.setModel(new javax.swing.table.DefaultTableModel)(…
您正在用一个模型补充另一个模型,但不向第二个模型提供任何数据-正如我所说的,摆脱DbUtils.resultSetTableModel(rs)
并控制如何创建模型以及如何从数据库提取数据