1

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

4

3 回答 3

1

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

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

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

  • 这不是一件容易的工作,因为它需要大量的努力,以及Java Essential classesSwing.JTable

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

  • 有一些关于RowFilter,的例子RowSorter,从未需要过,从未尝试过。

于 2012-10-09T08:57:22.083 回答
0

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

于 2012-10-09T08:47:19.407 回答
0

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

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

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);
            }
        }
    }

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

于 2012-10-09T09:11:32.433 回答