摆动如何覆盖组件

时间:2015-01-03 02:48:55

标签: java swing jtable layout-manager swingutilities

我没有找到好的头衔,我为此抱歉,

正如您将看到的那样,我称之为

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

3次,如果我点击typeButton然后是unitButton,它会在屏幕上显示2个表格。我希望每个按钮点击一个表,我该怎么做。

    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 个答案:

答案 0 :(得分:4)

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

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