为什么我的JScrollpane没有更新删除更改,尽管有validate()和repaint()

时间:2013-06-05 15:40:22

标签: java swing jtable tablemodel

我现在遇到了一个可怕的问题,那就是我的计划正在进行中。似乎我可以通过具有自定义模型的Jtable向我的ScrollPane添加元素。当我添加元素,表更新和行出现等等时,这很好。真正的问题是,当我删除元素时,无论如何都不会更新表。事实上,如果我最小化applet,然后重新启动它,所有元素现在都消失了,但是!问题是,如果我尝试添加新元素,它们就不会出现在ScrollPane上,即使我添加并在我打印它们时显示我的新元素时,arraysize确实增长了。我尝试了很多东西(你会看到我的重绘等)但不知道我还能做些什么。谢谢你的帮助:))

    modelx = new HumanListModel();
    final JTable newbiex = new JTable(modelx);  

    newbiex.setDefaultRenderer(Human.class, new HumanRenderer());
    newbiex.setFillsViewportHeight(true);
    newbiex.setVisible(true);
    playerViewer.setViewportView(newbiex);


    removeIndividual.addActionListener(new ActionListener()
    {

        public void actionPerformed(ActionEvent event)
        {

            playerViewer.remove(newbiex.getSelectedRow());
            playerViewerExhibition.remove(newbiex.getSelectedRow());
            ///modelx.remove(newbiex.getSelectedRow());///

            modelx.removeElementAt(newbiex.getSelectedRow());

            indexPoint -= 1;///helps keep track of index///

            newbiex.repaint();
            newbiex.revalidate();
            newbiey.repaint(); ///table on another tab using modelx///
            newbiey.revalidate();///table on another tab///
            playerViewer.repaint();
            playerViewer.revalidate();
            System.out.println(modelx.size());

        }
    });

2 个答案:

答案 0 :(得分:2)

modelx.removeElementAt(newbiex.getSelectedRow());

TableModel没有此名称的方法,因此您必须创建自定义方法。确保此方法调用fireTableRowsDeleted(...)。您始终可以查看DefaultTableModel的源代码,了解如何完成此操作。

newbiex.repaint();
newbiex.revalidate();
newbiey.repaint(); ///table on another tab using modelx///
newbiey.revalidate();///table on another tab///
playerViewer.repaint();
playerViewer.revalidate();

以上代码均不需要。如果从模型中触发相应的事件,表将自动重新绘制。

  

如果我最小化小程序,然后重新启动它,所有元素现在都消失了,但是!问题是,如果我尝试添加新元素,它们就不会出现在ScrollPane上,即使我添加并在我打印它们时显示我的新元素时,arraysize确实增长了。我尝试了很多东西(你会看到我的重绘等)但不知道我还能做些什么。谢谢你的帮助:))

我会说你已经错误地实现了你的TableModel。尝试使用DefaultTableModel。它支持动态添加/删除行。

或者您可以查看Row Table Model。您只需要实现几种方法。 JButtonTableModel提供了一个如何执行此操作的简单示例。

答案 1 :(得分:-1)

这是JTable中的常见问题,我通常会在执行完所有代码后重置可见性。

JTable.setVisible(false);
JTable.setVisible(true);

对我有用..