简体   繁体   中英

how to add checkbox in jtable header,so that the checked columns only i can called for print as per the user wish?

Actually, my need is that I have a jtable with 38 columns and i want to call the selected Jtable columns for printing. Problem is not print function,but how can i mark the columns i want to print? Plz

To particular column in JTable you can to pass String value "true" for RowFilter for checked JCheckBox(es) , and String value "false" for un_checked JCheckBox(es) , then print JTable and after printing to the printer to clear String to "" in the RowFilter

or simpler could be to use Boolean value directly

在此输入图像描述在此输入图像描述

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class JTableFilterDemo {

    private static TableRowSorter<TableModel> sorter;

    public static void main(String[] args) {
        Object[][] data = {{"A", 5, true}, {"B", 2, false}, {"C", 4, false}, {"D", 8, true}};
        String columnNames[] = {"Item", "Value", "Boolean"};
        TableModel model = new DefaultTableModel(data, columnNames) {

            private static final long serialVersionUID = 1L;

            @Override
            public Class<?> getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };
        JTable table = new JTable(model);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {

            public boolean include(Entry entry) {
                Boolean bol = (Boolean) entry.getValue(2);
                return bol.booleanValue() == true;
            }
        };
        sorter = new TableRowSorter<TableModel>(model);
        sorter.setRowFilter(filter);
        table.setRowSorter(sorter);
        JScrollPane scrollPane = new JScrollPane(table);
        JFrame frame = new JFrame("Filtering Table");
        frame.add(new JButton(new AbstractAction("Toggle filter") {

            private static final long serialVersionUID = 1L;
            private RowFilter<TableModel, Object> filter = new RowFilter<TableModel, Object>() {

                @Override
                public boolean include(javax.swing.RowFilter.Entry<? extends TableModel, ? extends Object> entry) {
                    Boolean bol = (Boolean) entry.getValue(2);
                    return bol.booleanValue() == false;
                }
            };

            @Override
            public void actionPerformed(ActionEvent e) {
                if (sorter.getRowFilter() != null) {
                    sorter.setRowFilter(null);
                } else {
                    sorter.setRowFilter(filter);
                }
            }
        }), BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM