JTable использует RowFilter для сравнения двух столбцов

#java #swing

#java #swing

Вопрос:

У меня есть JTable с определенным количеством столбцов (все строки). Я хотел бы реализовать фильтр, который показывает только строки, в которых column2 и column3 содержат одну и ту же строку. Возможно ли это? Я пытался использовать регулярное выражение, но я не вижу способа сравнить значения ячеек таблицы.

Ответ №1:

просто реализуйте RowFilter напрямую:

   RowFilter filter = new RowFilter<Object, Integer>() {

       @Override
       public boolean include(Entry entry) {
            return entry.getValue(firstColumn).equals(entry.getValue(secondColumn));
       }
  }
  

(нулевые проверки и полные обобщения опущены)

Ответ №2:

Вы можете использовать RowFilter, который сравнивает данные в обоих столбцах друг с другом.

http://download.oracle.com/javase/6/docs/api/javax/swing/RowFilter.html

Ответ №3:

      //col as int is in outer class. Pls note col is your column to specify.
     //So if you want more columns use || and with another column say col2.
     class Columnfilter  extends RowFilter<Object, Integer>
     { String txt=null;
     Columnfilter(String txt){
          this.txt=txt;
      }

      void setText(String txt){
            this.txt=txt;
      }

   @Override
   public boolean include(Entry entry) {

       if(txt==null)return false;
        if(col==-1)return true;//for all
     String colVal=  entry.getStringValue(col);//chk column if value exist
        int b= colVal.toLowerCase().indexOf(txt.toLowerCase());

        if(b!=-1){
            return true;
        }else{
            return false;
        }
   }}