Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的JTable对整数排序不正确?_Java_Swing_Jtable - Fatal编程技术网

Java 为什么我的JTable对整数排序不正确?

Java 为什么我的JTable对整数排序不正确?,java,swing,jtable,Java,Swing,Jtable,我的JTable将整数排序为1、10、100、101。它看起来仍在按字符串排序。我已经研究过类似的问题,并在必要时进行了调整。我错过了什么吗。我已经使用netbeans GUI创建者创建了它,如果它改变了什么。我也在用这个方法 listSubTable.setModel(DbUtils.resultSetToTableModel(rs)); 在代码的另一部分中。这会将结果集发送到表中。这是否优先于下面的代码。我把switch语句改为all integer,以防我弄糊涂了。它仍然将它们列为字符串

我的JTable将整数排序为1、10、100、101。它看起来仍在按字符串排序。我已经研究过类似的问题,并在必要时进行了调整。我错过了什么吗。我已经使用netbeans GUI创建者创建了它,如果它改变了什么。我也在用这个方法

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)
并控制如何创建模型以及如何从数据库提取数据