【问题标题】:displaying jtable in another panel and remove one row在另一个面板中显示 jtable 并删除一行
【发布时间】:2017-02-23 00:31:51
【问题描述】:

我有一个jtable,它显示在第一个jpanel,但同时它必须再次显示在第二个jpanel。但我应该删除jtable 的最后一行,然后再将其显示到第二个jpanel。如果我回到第一个jpanel,删除的行将返回,并在第二个jpanel 再次删除,反之亦然。

这可能吗?当我尝试研究它时,我似乎无法找到答案。谢谢你的帮助:)

【问题讨论】:

    标签: java swing oop jtable file-handling


    【解决方案1】:

    那么,让我看看我是否正确:表 1 和表 2 完全一样,只是表 1 比表 2 多一行,对吧?

    如果是这样,让它们共享同一个 TableModel,但使用 JTable tutorial 中的行过滤器让表 2 不显示模型的最后一行。

    这是我的尝试,但请理解这是我第一次做这种事情,所以“买者自负”:

    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());
        }
    }
    

    【讨论】:

    • 是的,这是正确的,非常感谢你,我现在就试试 :)
    • @bruh:请参阅上面的创建尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2012-03-17
    • 2013-04-07
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多