Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6957066

Jtable row sorter bug

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P3 P3
    • None
    • 6u18
    • client-libs

      FULL PRODUCT VERSION :
      java version "1.6.0_18"
      Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
      Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)



      A DESCRIPTION OF THE PROBLEM :
      I have used TableRowSorter class for a jtable. After sorting jtable model is not getting updated. View gets updated ( sorting is working) but the backend value is returning the old values.


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      I will provide the code.


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javax.swing.RowFilter;
      import javax.swing.table.TableModel;
      import javax.swing.table.TableRowSorter;

      public class JavaBugTest extends javax.swing.JFrame {

          public JavaBugTest() {
              initComponents();
              setRowSorter();
          }

          private void setRowSorter() {
              if (rowSorter == null) {
                  rowSorter = new TableRowSorter<TableModel>(jTable1.getModel());
                  jTable1.setRowSorter(rowSorter);
              }
          }

          @SuppressWarnings("unchecked")
          // <editor-fold defaultstate="collapsed" desc="Generated Code">
          private void initComponents() {

              jScrollPane1 = new javax.swing.JScrollPane();
              jTable1 = new javax.swing.JTable();
              jTextField1 = new javax.swing.JTextField();
              jLabel1 = new javax.swing.JLabel();

              setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

              jTable1.setModel(new javax.swing.table.DefaultTableModel(
                  new Object [][] {
                      {"aa", null, null, null},
                      {"bb", null, null, null},
                      {"cc", null, null, null},
                      {"dd", null, null, null},
                      {"ee", null, null, null},
                      {"ff", null, null, null}
                  },
                  new String [] {
                      "Title 1", "Title 2", "Title 3", "Title 4"
                  }
              ));
              jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
                  public void mouseClicked(java.awt.event.MouseEvent evt) {
                      jTable1MouseClicked(evt);
                  }
              });
              jScrollPane1.setViewportView(jTable1);

              jTextField1.addCaretListener(new javax.swing.event.CaretListener() {
                  public void caretUpdate(javax.swing.event.CaretEvent evt) {
                      jTextField1CaretUpdate(evt);
                  }
              });

              jLabel1.setText("Search");

              javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
              getContentPane().setLayout(layout);
              layout.setHorizontalGroup(
                  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                  .addGroup(layout.createSequentialGroup()
                      .addContainerGap()
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                          .addGroup(layout.createSequentialGroup()
                              .addComponent(jLabel1)
                              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                              .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE))
                          .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 377, javax.swing.GroupLayout.PREFERRED_SIZE))
                      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
              );
              layout.setVerticalGroup(
                  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                  .addGroup(layout.createSequentialGroup()
                      .addContainerGap()
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                          .addComponent(jLabel1)
                          .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)
                      .addContainerGap(18, Short.MAX_VALUE))
              );

              pack();
          }// </editor-fold>

          private void jTextField1CaretUpdate(javax.swing.event.CaretEvent evt) {
              String text = jTextField1.getText().trim();
              rowSorter.setRowFilter(RowFilter.regexFilter("(?i).*" + text + ".*", 0));
          }

          private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
              int selectedRow = jTable1.getSelectedRow();
              System.out.println(jTable1.getModel().getValueAt(selectedRow, 0));

          }

          /**
           * @param args the command line arguments
           */
          public static void main(String args[]) {
              java.awt.EventQueue.invokeLater(new Runnable() {

                  public void run() {
                      new JavaBugTest().setVisible(true);
                  }
              });
          }
          private TableRowSorter<TableModel> rowSorter;
          // Variables declaration - do not modify
          private javax.swing.JLabel jLabel1;
          private javax.swing.JScrollPane jScrollPane1;
          private javax.swing.JTable jTable1;
          private javax.swing.JTextField jTextField1;
          // End of variables declaration
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      using jtable not the jtable model
      System.out.println(jTable1.getValueAt(selectedRow, 0));

      SUPPORT :
      YES

            alexp Alexander Potochkin (Inactive)
            igor Igor Nekrestyanov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: