2014-01-06 54 views
0

我有一个JTable,它包含一个自定义AbstractTableModel,当调用getValueAt时返回一个对象。当然,我有一个自定义TableCellRenderer,它可以从对象中获取/构建文本,以便显示它。Java swing切换按钮以过滤jtable行

但是现在我想写一个过滤器。过滤器将是一个简单的切换按钮。当它打开时,我想过滤器被应用,当它关闭时,我想过滤器被删除。

我有两个问题因此。

第一个是我完全不知道如何编写过滤器,当你必须按对象而不是基元进行过滤时。

其次是我不知道如何将上述过滤器附加到切换按钮以便能够打开和关闭它。

对不起,如果这是一个迟钝的问题,但http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting是我看到的最没用的文档,因为解释没有深入。

感谢任何人的帮助。

编辑: 该对象包含多个字段,但我特别感兴趣的两个过滤器切换。当我说isSuper时,返回一个boolean值,当我拨打getName时,第二个返回string。如果第一个切换打开,它应显示所有在isSuper上返回true的条目,而第二个切换应显示当我拨打getName时名称受到两个词(空间存在)损害的所有条目。

+0

什么是你试图过滤的对象是什么样的?你想要过滤哪个属性? – MadProgrammer

+0

@MadProgrammer刚刚用Edit更新了这个问题:)我只想要两个切换。 – Quillion

回答

3

说实话,在JavaDocs拼出来相当不错...

有了这样的信息很少去,你能期待的最好的概述...

TableRowSorter<TableModel> trs = new TableRowSorter<TableModel>(); 
table.setRowSorter(trs); 

// Create the row filder... 
trs.setRowFilter(new RowFilter<TableModel, Integer>() { 

    @Override 
    public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) { 
     boolean include = false; 
     // Returns the value for the specific column... 
     CustomObject value = (CustomObject)entry.getValue(filterColumn); 
     if (filterBySuper) { 
      include = value.isSuper(); 
     } else { 
      include = value.getName().startsWith(fistPart) && value.getName().endWith(lastPart); 
     } 
     return include; 
    } 
}); 

当你想更新过滤器,你只需要调用...

trs.sort(); 
+0

我最大的问题是进入。我不知道它代表给定行中的对象。哇,非常感谢你:)这是惊人的帮助 – Quillion

+0

你应该使用教程和Java文档。我还雇员简单地测试项目,看看是什么通过,所以我可以量化信息到一个上下文状态 - 但我很愚蠢,); – MadProgrammer

+0

[例如](http://stackoverflow.com/questions/17854854/ JTable中-的RowFilter和-的RowFilter进入) – mKorbel

3

首先,我绝对不知道如何编写一个过滤器,当你必须按对象而不是基元进行过滤时。

您是否阅读过RowFilter API?它显示了如何基于自定义对象创建自定义过滤器的示例。

其次是我不知道如何将上述过滤器附加到切换按钮,以便能够打开和关闭它。

您是否阅读了教程并尝试运行演示?本教程使用DocumentFilter在每次用户更改文本字段中的文本时动态更改筛选器。所以本教程将向您展示如何根据用户输入动态更改过滤器。每次按下切换按钮时,您都可以修改代码以更改滤镜。

它包含一个自定义AbstractTableModel,它在调用getValueAt时返回一个对象。当然,我有一个自定义的TableCellRenderer,它可以从对象中获取/构造文本,以便显示它。

与我的答案无关,但我并不真正理解这种说法。你是说模型中的每个单元格都返回一个不同的对象,还是每个单元格都返回相同的对象,但是你只是为column1,column2,column3等显示对象的不同属性?无论哪种方式,这听起来像一个奇怪的设计。我们可以提出更好的建议。发布证明问题的SSCCE。