Java中是否有任何实现来按列(标题值)而不是行来过滤JTable(使用搜索JTextField)?我需要根据搜索时找到的字符串显示/隐藏列。
问问题
2487 次
3 回答
1
Java中是否有任何实现来按列(标题值)而不是行来过滤JTable(使用搜索JTextField)?
- 是的,看看RowFilter并应用于所需的列
我需要根据搜索时找到的字符串显示/隐藏列。
这不是一件容易的工作,因为它需要大量的努力,以及
Java Essential classes
对Swing
.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 回答