【问题标题】:Filter a JTable by column rather than row in Java在 Java 中按列而不是行过滤 JTable
【发布时间】:2012-09-29 13:13:41
【问题描述】:

在 Java 中是否有任何实现来通过列(标题值)而不是行来过滤 JTable(使用搜索 JTextField)?我需要根据搜索时找到的字符串显示/隐藏列。

【问题讨论】:

    标签: java jtable jtextfield rowfilter tablecolumn


    【解决方案1】:

    在 Java 中是否有任何实现来通过列(标题值)而不是行来过滤 JTable(使用搜索 JTextField)?

    • 是的,请查看RowFilter 并应用于所需的列

    我需要根据搜索时找到的字符串显示/隐藏列。

    • 这不是一件容易的工作,因为它需要大量的努力,以及对Java Essential classesSwing 的丰富知识以及成为JTable 的专家

    • 我不会这样,使用正确的ColumnRender,然后应该突出显示列,而不是在屏幕上跳转(隐藏-->显示-->隐藏等)JTables Column

    • 有一些关于RowFilterRowSorter 的例子,从来不需要,从来没有尝试过。

    【讨论】:

    • 另见Q&A 响应表头点击。
    【解决方案2】:

    我想我已经让它像这样工作了:

    为临时表和表模型声明一些全局变量以保存隐藏列:

    private JTable hiddenTable = new JTable();
    private DefaultTableColumnModel hiddenModel = new DefaultTableColumnModel();
    

    然后对每个按下的键使用过滤方法,将要隐藏的列添加到临时表模型中,同时将它们从主表模型中删除。然后,当字符串匹配时,通过将它们添加回主表并从临时表中删除它们来再次显示它们:

    private void filterList() {
    
            // Hide columns
            for (TableColumn column : table.getColumns()) {
                if (!((String) column.getHeaderValue()).toLowerCase().contains(
                        searchBox.getText().toLowerCase().trim())) {
                    hiddenModel.addColumn(column);
                    table.getColumnModel().removeColumn(column);
                }
            }
    
            // Show columns
            for (TableColumn column : hiddenTable.getColumns()) {
                if (((String) column.getHeaderValue()).toLowerCase().contains(
                        searchBox.getText().toLowerCase().trim())) {
                    table.getColumnModel().addColumn(column);
                    hiddenModel.removeColumn(column);
                }
            }
        }
    

    这里唯一的问题是,当重新添加到表中时,列会失去顺序。

    【讨论】:

      【解决方案3】:

      您可以使用自定义的TableModel 实现来包装您的真实模型来进行过滤。只要在列发生变化时不断通知 TableModelListeners。

      【讨论】:

        猜你喜欢
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多