无法从JTable删除空白行

问题描述:

我创建了一个JTable,它有时会有空行。我想自动删除这些行。我知道你可以通过model.removeRow(0)手动完成,它会删除第一行,但是这个表格需要能够自动完成。但是,当我运行下面的代码时,它什么也不做。它的意思是查看行中的第一个单元格,如果它是空的,在这种情况下,行的其余部分也是如此,它应该删除行。我将不胜感激任何帮助克服这个问题无法从JTable删除空白行

//CompData... 
nextPosition=0 
String[] aHeaders = {"Athlete ID","Forename","Surname","On The Team"}; 

    model = new DefaultTableModel(compTableData,aHeaders) 
    { 
     @Override 
     public boolean isCellEditable(int row, int column) 
     { 
      if (column < 3) 
      { 
       return false; 
      } 

      else 
      { 
       return true; 
      } 
     } 

     public boolean removeRow(int row, int column) 
     { 
      for(int i=0;i<nextPosition;i++) 
      { 
       if(athTable.getModel().getValueAt(i,0).equals("")) 
       { 
        return row == i; 
       } 
      } 
      return false; 
     } 
    }; 

    athTable = new JTable(model); 
+0

何时removeRow被调用?您可以使用RowFilter并过滤掉空白的行。请参阅[如何使用表格](https://docs.oracle.com/javase/tutorial/uiswing/components/table.html)和[RowFilter](https://docs.oracle.com/javase/7/docs /api/javax/swing/RowFilter.html) – MadProgrammer 2015-03-31 20:10:27

+0

不会在代码中调用'athTable = new JTable(model);'因为它在模型中@MadProgrammer – Dan 2015-03-31 20:12:31

+0

但是什么调用它? – MadProgrammer 2015-03-31 20:21:41

你使用一个RowFilter根据您的标准来筛选入/出列,独立于模型

Filter

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.RowFilter; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 
import javax.swing.table.TableRowSorter; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       DefaultTableModel model = new DefaultTableModel(new String[]{"Fruit"}, 0); 
       model.addRow(new String[]{"Banana"}); 
       model.addRow(new String[]{""}); 
       model.addRow(new String[]{"Apple"}); 
       model.addRow(new String[]{""}); 
       model.addRow(new String[]{"Strewberry"}); 
       model.addRow(new String[]{""}); 
       model.addRow(new String[]{"Grape"}); 
       model.addRow(new String[]{""}); 

       JTable table = new JTable(model); 
       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; 
        } 
       }); 


       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new JScrollPane(table)); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

的请参阅 How to Use TablesHow to use tables, Sorting and Filtering以获取更多详细信息