我现在遇到了一个可怕的问题,那就是我的计划正在进行中。似乎我可以通过具有自定义模型的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());
}
});
答案 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);
对我有用..