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

标签 java swing jtable tablemodel

我现在遇到了一个可怕的问题,它正在毁掉我的程序。看来我可以通过具有自定义模型的 Jtable 将元素添加到我的 ScrollPane 中。当我添加元素、表格更新和行出现等时,这很好。真正的问题是,当我删除元素时,无论如何它都不会更新表格。事实上,如果我最小化小程序,然后再次打开它,所有元素现在都消失了,但是!问题是,如果我尝试添加新元素,它们不会出现在 ScrollPane 上,即使数组大小在添加时确实会增长,并在 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());

        }
    });

最佳答案

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

以上代码都不需要。如果您从模型中触发适当的事件,表格将自动重新绘制。

if I minimize the applet, then bring it up again, all the elements are now gone, but! the problem is that if I try to add new elements, they don't appear on ScrollPane even though the arraysize does grow when I add and shows my new elements when I println them. I've tried many things (you'll see with my repaints etc) but not sure what else i can do. thanks for any help :)

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

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

关于java - 为什么我的 JScrollpane 没有更新删除更改,尽管有 validate() 和 repaint(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16944160/

相关文章:

java - 用 Java 模仿 Office 2007 的缩放栏(修改后的 JSlider)

java - 在 Java 中使用 OpenPDF 居中/对齐表格单元格中的文本

java - Android Java 添加了 ArrayList 现在程序运行速度很慢

java - 将 GUI 添加到现有的基于 Java 控制台的程序

Java - TableModel 和 DefaultTableModel

swing - 使用表格单元格标题颜色自定义 jtable 单元格渲染器

java - 为什么当我改变场景时随机边界的值会重置?

java - 与 Java 相比,Javascript 的速度有多快?

java - 将 JTextFields 行添加到 JScrollPane

java - 为 ROW 着色并仍然能够选择其后的其他行?