我是java的新手,所以我的知识非常有限。如果我忽略了一些相当明显的解决方案,我现在已经想借口了。
我在尝试在程序中创建函数时遇到问题,因此用户可以通过双击删除一行(来自JTable
)。我试过使用这段代码:
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
JTable target = (JTable)e.getSource();
int deletedRow = target.getSelectedRow();
myTableModel.removeRow(deletedRow);
myTableModel.fireTableDataChanged();
}
}
myTableModel
从AbstractTableModel
延伸。我希望你们中的一些人能够帮助我。
答案 0 :(得分:2)
myTableModel从AbstractTableModel扩展。
我不知道这意味着什么。我认为这意味着你正在使用DefaultTableModel,因为它实现了removeRow(...)方法。
无需调用fireTableDateChanged()方法。 DefaultTableModel的removeRow()方法将为您执行此操作。 TableModel负责调用这些方法,而不是您的自定义代码。
你的方法被执行了吗?默认情况下,双击并调用双击的单元格的编辑器。因此,您需要覆盖表的isCellEditable(...)方法以返回false。然后在表上调用双击,并调用您的侦听器代码。
同样在您的事件代码中,您访问该表,因此您应该从表中获取模型以确保您正在访问正确的模型:
DefaultTableModel model = (DefaultTableModel)table.getModel();
如果您需要更多帮助(以及将来发布问题时),请发布您的SSCCE,因为我们无法根据几行代码猜测您在做什么。
答案 1 :(得分:1)
int c = evt.getClickCount();
if (c == 2) {
int res = JOptionPane.showConfirmDialog(null, "Are you sure to delete this data?", "", JOptionPane.YES_NO_OPTION);
switch (res) {
case JOptionPane.YES_OPTION:
int p = table.getSelectedRow();
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.removeRow(p);
JOptionPane.showMessageDialog(null, "Delete Successfully");
break;
case JOptionPane.NO_OPTION:
JOptionPane.showMessageDialog(null, "Delete Action is Canceled");
break;
}
}