VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 820|回复: 3

JTable指定列的过滤

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-10 20:00:01 | 显示全部楼层 |阅读模式
我想在JTable指定的列实现过滤,比如只在姓名这一列进行过滤,不知道应该如何做
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-1-16 11:36:01 | 显示全部楼层
重写JTREE的方法即可
class ResultSetTableModel extends AbstractTableModel
{  
   /**
      Constructs the table model.
      @param aResultSet the result set to display.
   */
   public ResultSetTableModel(ResultSet aResultSet)
   {  
      rs = aResultSet;
      try
      {  
         rsmd = rs.getMetaData();
      }
      catch (SQLException e)
      {  
         e.printStackTrace();
      }
   }

   public String getColumnName(int c)
   {  
      try
      {  
         return rsmd.getColumnName(c + 1);
      }
      catch (SQLException e)
      {  
         e.printStackTrace();
         return "";
      }
   }

   public int getColumnCount()
   {  
      try
      {  
         return rsmd.getColumnCount();
      }
      catch (SQLException e)
      {  
         e.printStackTrace();
         return 0;
      }
   }

   public Object getValueAt(int r, int c)
   {  
      try
      {  
         rs.absolute(r + 1);
         return rs.getObject(c + 1);
      }
      catch(SQLException e)
      {  
         e.printStackTrace();
         return null;
      }
   }

   public int getRowCount()
   {  
      try
      {  
         rs.last();
         return rs.getRow();
      }
      catch(SQLException e)
      {  
         e.printStackTrace();
         return 0;
      }
   }

   private ResultSet rs;
   private ResultSetMetaData rsmd;
}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-4 13:00:01 | 显示全部楼层
[Quote=引用 1 楼 seakey 的回复:]

重写JTREE的方法即可
class   ResultSetTableModel   extends   AbstractTableModel
{     
        /**
                 Constructs   the   table   model.
                 @param   aResultSet   the   result ……
[/Quote]

lj
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-4 13:45:01 | 显示全部楼层
以下内容来自 jdk 文档
[Quote]
javax.swing.RowFilter<M,I>

RowFilter 用于从模型中过滤条目,使得这些条目不会在视图中显示。例如,一个与 JTable 关联的 RowFilter 可能只允许包含带指定字符串的列的那些行。条目 的含义取决于组件类型。例如,当过滤器与 JTable 关联时,一个条目对应于一行;当过滤器与 JTree 关联时,一个条目对应于一个节点。
子类必须重写 include 方法指示是否应该在视图中显示该条目。Entry 参数可用于获取该条目中每一列的值。下例显示了一个 include 方法,该方法只允许包含以字符串“a”开头的一个或多个值的条目。
RowFilter<Object,Object> startsWithAFilter = new RowFilter<Object,Object>() {
public boolean include(Entry<? extends Object, ? extends Object> entry) {
for (int i = entry.getValueCount() - 1; i >= 0; i--) {
if (entry.getStringValue(i).startsWith("a")) {
// The value starts with "a", include it
return true;
       }
     }
// None of the columns start with "a"; return false so that this
// entry is not shown
return false;
   }
};

RowFilter 有两个形式类型参数,可用来为特定模型创建 RowFilter。例如,以下代码假定一个包装 Person 类型对象的特定模型。只显示年龄大于 20 的 Person:
RowFilter<PersonModel,Integer> ageFilter = new RowFilter<PersonModel,Integer>() {
public boolean include(Entry<? extends PersonModel, ? extends Integer> entry) {
PersonModel personModel = entry.getModel();
Person person = personModel.getPerson(entry.getIdentifier());
if (person.getAge() > 20) {
// Returning true indicates this row should be shown.
return true;
     }
// Age is <= 20, don't show it.
return false;
   }
};
PersonModel model = createPersonModel();
TableRowSorter<PersonModel> sorter = new TableRowSorter<PersonModel>(model);
sorter.setRowFilter(ageFilter);

从以下版本开始:
1.6[/Quote]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表