我现在遇到了一个可怕的问题,它正在毁掉我的程序。看来我可以通过具有自定义模型的 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/