Как удалить строку двойным щелчком мыши? - PullRequest
2 голосов
/ 08 мая 2011

Я новичок в 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. Я надеюсь, что некоторые из вас смогут мне помочь.

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

myTableModel расширяется от AbstractTableModel.

Я не знаю, что это значит. Я предполагаю, что это означает, что вы используете DefaultTableModel, потому что он реализует метод removeRow (...).

Нет необходимости вызывать метод fireTableDateChanged (). Метод removeRow () класса DefaultTableModel сделает это за вас. TableModel отвечает за вызов этих методов, а не за пользовательский код.

Ваш метод выполняется? По умолчанию двойной щелчок мышью вызывает редактор ячейки, на которой вы дважды щелкнули. Поэтому вам нужно переопределить метод isCellEditable (...) вашей таблицы, чтобы он возвращал false. Затем будет выполнен двойной щелчок по таблице, и ваш код слушателя должен быть вызван.

Также в вашем коде события вы получаете доступ к таблице, поэтому вы должны получить модель из таблицы, чтобы убедиться, что вы обращаетесь к нужной модели:

DefaultTableModel model = (DefaultTableModel)table.getModel();

Если вам нужна дополнительная помощь (и в будущем, когда вы отправите вопрос), опубликуйте свой SSCCE , потому что мы не можем угадать, что вы делаете, основываясь на нескольких строках кода.

1 голос
/ 23 июля 2013
 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;
        }

    }
...