在Java中是否有任何实现来过滤JTable(使用搜索JTextField)的列(标题值)而不是其行?我需要根据搜索时找到的字符串显示/隐藏列。
答案 0 :(得分:1)
在Java中是否有任何实现来过滤JTable(使用搜索JTextField)的列(标题值)而不是其行?
我需要根据搜索时找到的字符串显示/隐藏列。
这不是一件容易的事,因为它需要付出很多努力,并且对Java Essential classes
,Swing
和JTable
我不会这样做,使用正确的ColumnRender
,然后应该突出显示列,而不是跳跃(隐藏 - > show ---> hide等){{ 1}}在屏幕上
有一些关于JTables Column
,RowFilter
的例子,从未尝试过,从未尝试过。
答案 1 :(得分:0)
您可以使用自定义TableModel实现来包装您的真实模型以进行过滤。只要列发生变化,就继续通知TableModelListeners。
答案 2 :(得分: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);
}
}
}
这里唯一的问题是,当列重新添加到表中时,列会丢失它们的顺序。