0

我现在有一个可怕的问题,现在我的程序注定要失败。看来我可以通过具有自定义模型的 Jtable 向我的 ScrollPane 添加元素。当我添加元素,表格更新和行出现等时很好。真正的问题是当我删除元素时,无论如何它都不会更新表格。事实上,如果我将小程序最小化,然后再次打开它,现在所有元素都没有了,但是!问题是,如果我尝试添加新元素,它们不会出现在 ScrollPane 上,即使我添加时 arraysize 确实会增长,并在我 println 时显示我的新元素。我已经尝试了很多事情(你会看到我的重绘等),但不确定我还能做什么。谢谢你的帮助 :)

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

        }
    });
4

2 回答 2

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 确实会增长,并在我 println 时显示我的新元素。我已经尝试了很多事情(你会看到我的重绘等),但不确定我还能做什么。谢谢你的帮助 :)

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

或者您可以查看行表模型。您只需要实现几个方法。JButtonTableModel 给出了一个简单的例子来说明如何做到这一点。

于 2013-06-05T15:58:59.303 回答
-1

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

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

这个对我有用..

于 2013-06-05T15:56:23.473 回答