简体   繁体   中英

displaying jtable in another panel and remove one row

i have one jtable and it is displayed to 1st jpanel but at the same it has to be displayed again in 2nd jpanel . but i should remove the last row of the jtable before i'll display it to 2nd jpanel . and if i go back to the 1st jpanel , the removed row will go back, and remove again in 2nd jpanel , vice versa.

is this possible? i can't seem to find answers when i tried researching it. thank you for any help :)

So, let me see if I have this correct: table 1 and table 2 will be exactly alike except that table 1 will have one more row than table 2, right?

If so, have them share the same TableModel, but have table 2 not display the last row of the model by using a row filter as per the JTable tutorial .

Here's my attempt to do this, but understand that this is my first time doing this sort of thing, and so "caveat emptor":

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

@SuppressWarnings("serial")
public class ShareTableModel extends JPanel {
    private static final Integer[][] DATA = { 
            { 1, 2, 3 }, 
            { 4, 5, 6 }, 
            { 7, 8, 9 } ,
            {10, 11, 12}, 
            {13, 14, 15}};
    private static final String[] COLS = { "A", "B", "C" };
    private static final int SPINNER_COUNT = 3;
    private DefaultTableModel tblModel = new DefaultTableModel(DATA, COLS);
    private JTable table1 = new JTable(tblModel);
    private JTable table2 = new JTable(tblModel);
    private JSpinner[] spinners = new JSpinner[SPINNER_COUNT];
    private MySorter2 sorter = new MySorter2(tblModel);

    public ShareTableModel() {
        JPanel addRowPanel = new JPanel();
        for (int i = 0; i < spinners.length; i++) {
            JSpinner spinner = new JSpinner(new SpinnerNumberModel(10, 0, 100, 1));
            addRowPanel.add(spinner);
            spinners[i] = spinner;
        }
        addRowPanel.add(new JButton(new AddRowAction("Add Row", KeyEvent.VK_A)));

        table2.setRowSorter(sorter);

        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.add("Table 1", new JScrollPane(table1));
        tabbedPane.add("Table 2", new JScrollPane(table2));

        setLayout(new BorderLayout());
        add(tabbedPane);
        add(addRowPanel, BorderLayout.PAGE_END);
    }

    private class MySorter2 extends TableRowSorter<DefaultTableModel> {
        public MySorter2(DefaultTableModel tableModel) {
            super(tableModel);
            setRowFilter(new RowFilter<DefaultTableModel, Integer>() {
                @Override
                public boolean include(RowFilter.Entry<? extends DefaultTableModel, ? extends Integer> entry) {
                    int modelRow = entry.getIdentifier();
                    return modelRow < getModelRowCount() - 1;
                }
            });
        }
    }

    private class AddRowAction extends AbstractAction {
        public AddRowAction(String name, int mnemonic) {
            super(name);
            putValue(MNEMONIC_KEY, mnemonic);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            Integer[] row = new Integer[spinners.length];
            for (int i = 0; i < row.length; i++) {
                row[i] = (Integer) spinners[i].getValue();
            }
            tblModel.addRow(row);
            sorter.sort();
        }
    }

    private static void createAndShowGui() {
        JFrame frame = new JFrame("ShareTableModel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new ShareTableModel());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

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