如何通过双击删除行?

时间:2011-05-08 18:03:38

标签: java swing jtable double-click

我是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();
        } 
     }

myTableModelAbstractTableModel延伸。我希望你们中的一些人能够帮助我。

2 个答案:

答案 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;
        }

    }