带有行过滤器的 JTable - 如何仅迭代过滤的行 [重复]
Posted
技术标签:
【中文标题】带有行过滤器的 JTable - 如何仅迭代过滤的行 [重复]【英文标题】:JTable with row Filter - how to iterate over filtered rows only [duplicate] 【发布时间】:2015-03-05 13:20:46 【问题描述】:我有 JTable,其中行由 RowFilter 过滤(B 行被隐藏)。
如何迭代仅可见行(不是隐藏的 B 行)?
不幸的是,下面的示例还打印了我想跳过的 B 行。
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class JTableFilterDemo
public static void main(String[] args)
Object[][] data = "A", 5 , "B", 2 , "C", 4 , "D", 8 ;
String columnNames[] = "Item", "Value" ;
TableModel model = new DefaultTableModel(data, columnNames)
public Class<?> getColumnClass(int column)
return getValueAt(0, column).getClass();
;
JTable table = new JTable(model);
RowFilter<Object, Object> filter = new RowFilter<Object, Object>()
public boolean include(Entry entry)
Integer population = (Integer) entry.getValue(1);
return population.intValue() > 3;
;
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(
model);
sorter.setRowFilter(filter);
table.setRowSorter(sorter);
JScrollPane scrollPane = new JScrollPane(table);
JFrame frame = new JFrame("Filtering Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btnNewButton = new JButton("Print values");
btnNewButton.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
for(int row = 0;row < table.getModel().getRowCount();row++)
System.out.println(table.getModel().getValueAt(row, 0));
);
frame.getContentPane().add(btnNewButton, BorderLayout.SOUTH);
frame.getContentPane().add(scrollPane);
frame.setSize(300, 200);
frame.setVisible(true);
【问题讨论】:
【参考方案1】:线条
for(int row = 0;row < table.getModel().getRowCount();row++)
System.out.println(table.getModel().getValueAt(row, 0));
应替换为:
for(int row = 0;row < table.getRowCount();row++)
System.out.println(table.getModel().getValueAt(table.convertRowIndexToModel(row), 0));
【讨论】:
以上是关于带有行过滤器的 JTable - 如何仅迭代过滤的行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将过滤后的 jTable 的内容导出到 pdfpTable
如何使用RowHeader处理JTable中的RowSorter同步?
如何使用 columns().every() 仅检索带有过滤元素的列