如何将已过滤的jTable的内容导出到pdfpTable

时间:2019-02-10 08:56:39

标签: java jtable itext pdfptable

我有一个JTable,并且正在使用JFilter根据用户输入过滤其内容。现在,我打算使用iText库将JTable的内容导出到PdfPTable。使用过滤器时,内容无法正确复制。但是,如果不使用过滤器,则表将被正确复制,即用户不输入任何文本进行过滤。 我相信这是由于JTable中的内容实际上并未更改,因为我正在使用rowSorted,如下所示:

过滤

TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(jTable.getModel());
jTable.setRowSorter(rowSorter);
jtfFilter.getDocument().addDocumentListener(new DocumentListener(){

    @Override
    public void insertUpdate(DocumentEvent e) {
        String text = jtfFilter.getText();

        if (text.trim().length() == 0) {
            rowSorter.setRowFilter(null);
        } else {
            rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
        }
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        String text = jtfFilter.getText();

        if (text.trim().length() == 0) {
            rowSorter.setRowFilter(null);
        } else {
            rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
        }
    }

实例化

PdfPTable pdfTable = new PdfPTable(somejTable.getColumnCount());

正在复制:

for(int i=0;i<rowCnt;i++)
    {
        for(int j=0;j<colCnt;j++)
        {
            Object val = table.getModel().getValueAt(i, j);
            if((val!=null))
                pdfTable.addCell(val.toString());
            else
                pdfTable.addCell("null");

        }
    }

那么有没有一种方法可以获取JTable的确切过滤内容?我是否还需要在PdfPTable上使用rowSorter之类的东西? 谢谢。

1 个答案:

答案 0 :(得分:2)

您需要通过调用convertRowIndexToModel()将每个表行索引转换为模型行索引。

请参见How can I get the filtered model