swing 如何覆盖一个组件

swing how to override a component

我没有找到合适的标题我想对此感到抱歉,

正如你将在底部看到的那样,我已调用

ssframe.add(new JScrollPane(table),BorderLayout.CENTER);

3 次,如果我单击 typeButton,然后单击 unitButton,它会在屏幕上生成 2 table。我想 table 每个按钮都被点击,我该怎么做。

    private class searchListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            JButton clickd = (JButton)e.getSource();
            if (clickd==typeButton)
                {
                    try
                        {
                            SwingUtilities.updateComponentTreeUI(ssframe);
                            showTable1("type",typefield.getText());
                            ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
                        }catch(Exception a)
                        {
                            a.printStackTrace();
                            JOptionPane.showMessageDialog(null,"Error Code = 0112");
                        }
                }
            else if (clickd==unitButton)
                {
                    try
                        {
                            SwingUtilities.updateComponentTreeUI(frame);
                            showTable1("unit",unitfield.getText());
                            ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
                        }catch(Exception a)
                        {
                            a.printStackTrace();
                            JOptionPane.showMessageDialog(null,"Error Code = 0112");
                        }
                }
            else if (clickd==priceButton)
                {
                    try
                        {
                            SwingUtilities.updateComponentTreeUI(frame);
                            showTable3("price",Integer.parseInt(pricefield.getText()));
                            ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
                        }catch(Exception a)
                        {
                            a.printStackTrace();
                            JOptionPane.showMessageDialog(null,"Error C0de = 0112");
                        }
                }
        }

编辑 : 它可能会帮助我解决问题的人 :

model.setRowCount(0);
model.fireTableDataChanged();

有多种方法可以做到这一点。

  1. 您可以维护对 JScrollPane 的引用并使用 setViewportView 替换它的视图,提供您想要显示的 table。 JScrollPane 将保留在框架上
  2. (最好)更新 table 的 table 模型,这将替换内容并更新 UI...这意味着 JScrollPaneJTable 将作为单一参考进行维护,然后您只需更改模型即可。
  3. 另一种解决方案可能是使用 CardLayout,这样您就可以根据需要切换视图
  4. 一个非常非常糟糕的主意是在添加新组件之前删除之前添加的组件...