Anti Atlas Dev
Anti Atlas Dev

Reputation: 437

remove unused rows in jtable (Empty Rows)?

a question about removing unused rows in jtable i am using DefualtTableModel my table already has some data & when i update it leave some columns empty to update theme later so they are null column.. i want to remove theme with a push button before saving data.. i actually tried this code:

private void btn_ClearActionPerformed(java.awt.event.ActionEvent evt) {                                              
      table.setAutoCreateRowSorter(true); 

      TableRowSorter sorter = (TableRowSorter) table.getRowSorter();
      sorter.setRowFilter(new RowFilterImpl());                
}

i also tried this:

private void btn_ClearActionPerformed(java.awt.event.ActionEvent evt) {
    table.setAutoCreateRowSorter(true);
    TableRowSorter sorter = (TableRowSorter) table.getRowSorter();
    sorter.setRowFilter(new RowFilter<TableModel, Integer>() {
        @Override
        public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
            boolean included = true;
            Object cellValue = entry.getModel().getValueAt(entry.getIdentifier(), 0);
            if (cellValue == null || cellValue.toString().trim().isEmpty()) {
                included = false;
            }
            return included;
        }
    });
}

the code above is working but i don't like it becuase it resizes rows after filtering so i want to do something with model.remove(); using if conditions.. and i want to specify columns for example column 7 & 12 and want to remove only empty rows in specified columns..

ok i tried this code:

for (int i = model.getRowCount() - 1; i >= 0; i--)
{
     Object col1 = model.getValueAt( i,model.getColumnCount() - 6);
     Object col2 = model.getValueAt( i,model.getColumnCount() - 11);

     if (col1 == null || col2 == null)
         model.removeRow(i);
}

i faced same problem and i found this code below cuasing that problem so i removed it ... i also found that it counts how many time you selected or clicked on a row and then resizes it as many you clicked!

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
       int lastRow = -1;

       public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
               if (lastRow != -1) {
                  table.setRowHeight(lastRow, table.getRowHeight());
              }

              int row = table.getSelectedRow();
              table.setRowHeight(row, 23);
              lastRow = row;
         }
       }
   });

any idea guys?

thanx in advance

Upvotes: 0

Views: 2199

Answers (1)

camickr
camickr

Reputation: 324098

Create a loop to remove the data from the model.

Maybe something like:

for (int i = model.getRowCount() - 1; i >= 0; i--)
{
    if (column?? == null && column?? == null)
        model.removeRow(i);
}

added the problem above in table.setRowHeight();

Well, that should have been part of the original question. How do we know you have custom logic doing something strange???

In the future post a proper SSCCE that demonstrates the problem so we don't have to guess what you are doing.

i get the same problem it resizes rows

Then remove the listener:

  1. remove the listener
  2. delete the rows
  3. add the listener

Upvotes: 4

Related Questions