栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

按钮以筛选JTable的复选框处于选中状态

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

按钮以筛选JTable的复选框处于选中状态

让我们重新阅读教程“
如何使用表:排序和过滤”。

除了对结果重新排序之外,表排序器还可以指定将显示哪些行。这称为过滤。

TableRowSorter
使用javax.swing.RowFilter对象实现过滤。
RowFilter
实现几种创建通用过滤器的工厂方法。

要看的东西:

  • TableRowSorter
    。-我们知道我们会需要这个。
  • 哦,他们给了我们
    RowFilter
    文档链接。让我们在新的浏览器标签中打开它。
  • 但是首先,最后一行
    RowFilter
    实现了几种创建通用过滤器的工厂方法”。
    。我们可能应该看看那些 “常见种类” 是什么。

RowFilter javadoc

  • 静态方法- ,
    andFilter
    dateFilter
    notFilter
    numberFilter
    ,。
    orFilter
    regexFilter
    好的,我
    regexFilter
    从本教程中认识到了。但是,仅以他们的名字命名的其他人听起来就不太乐观。也许我们应该实施我们自己的。让我们看看其余的Javadoc

javax.swing.RowFilter<M,I>

类型参数:

M
-模型的类型;例如
PersonModel

I
-标识符的类型;使用时
TableRowSorter
将是
Integer


好的,因此我们知道两件事。创建custom时

RowFilter
,应将
TableModel
类型作为第一个参数,并键入
Integer
以代表行号。

RowFilter
用于过滤模型中的条目,以使它们不会显示在视图中。例如,与的
RowFilter
关联
JTable
可能只允许包含具有特定字符串的列的行。条目的含义取决于组件类型。例如,当过滤器与关联时
JTable
,条目对应于一行;当与a关联时
JTree
,条目对应于一个节点。

子类必须重写此

include
方法,以指示是否应在视图中显示该条目。该
Entry
参数可用于获取该条目中每个列中的值

因此,基于这两个参数,我们知道了

RowFilter
用来过滤视图中不需要的行,并且如果我们创建自己的行,则需要重写该
include
方法以返回是否应显示行。
。而且该
include
方法还将具有一个
Entry
参数,当确定哪一行不返回true时,我们可以从中获取我们可能感兴趣的详细信息。这是javadoc给我们的基本示例(准则)

RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {    @Override    public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {        // do your logic here to return true or false.    }};

很酷,但是什么是此类

RowFilter.Entry
,它可以为我们提供什么有趣的信息?让我们看一下javadoc。

我们可以看到的一件有趣的事情是

getModel()
方法。由此我们可以得到表模型。现在让我们完成实施

private static final int CHECKBOX_COLUMN = 4;...RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {    @Override    public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {        int modelRow = entry.getIdentifier();        Boolean checked = (Boolean)entry.getModel().getValueAt(modelRow, CHECKBOX_COLUMN);        return checked;    }};

也不多。现在,剩下的就是使用正则表达式过滤器,将过滤器设置为排序器,正如您已经从Oracle教程中学到的那样。

这是填充演示代码。它没有

ActionListener
为按钮按下实现。我不想为你做 任何事情 。您应该有足够的信息来自己处理:-D快乐学习!

import javax.swing.Jframe;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.RowFilter;import javax.swing.SwingUtilities;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableModel;import javax.swing.table.TableRowSorter;public class TableBooleanFilterDemo {    public TableBooleanFilterDemo() {        JTable table = getTable();        TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(table.getModel());        RowFilter filter = getRowFilter();        rowSorter.setRowFilter(filter);        table.setRowSorter(rowSorter);        Jframe frame = new Jframe();        frame.add(new JScrollPane(table));        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.pack();        frame.setLocationByPlatform(true);        frame.setVisible(true);    }    private static final int CHECKBOX_COLUMN = 4;    private RowFilter getRowFilter() {        RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() { @Override public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {     int modelRow = entry.getIdentifier();     Boolean checked = (Boolean)entry.getModel().getValueAt(modelRow, CHECKBOX_COLUMN);     return checked; }        };        return filter;    }    private JTable getTable() {        Object[][] data = { {"Kathy", "Smith",     "Snowboarding", new Integer(5), new Boolean(false)}, {"John", "Doe",     "Rowing", new Integer(3), new Boolean(true)}, {"Sue", "Black",     "Knitting", new Integer(2), new Boolean(false)}, {"Jane", "White",     "Speed reading", new Integer(20), new Boolean(true)}, {"Joe", "Brown",     "Pool", new Integer(10), new Boolean(false)}        };        String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};        return new JTable(new DefaultTableModel(data, columnNames) { public Class getColumnClass(int c) {     return getValueAt(0, c).getClass(); }        });    }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable(){ public void run() {     new TableBooleanFilterDemo(); }        });    }}

老实说,我从来不需要实现自己的方法

RowFilter
,但是以上就是我尝试学习新东西时要经历的过程。让我花了更长的时间写这个答案,然后学习如何做。要学会阅读文档,而不仅仅是教程。教程是一个很好的起点,但是一旦您遇到更复杂的问题,就需要更深入地研究。与您要学习的任何新技术相同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号