Удалить несколько строк из JTable и БД

307
22 октября 2017, 20:02

Необходимо сделать так, чтобы можно было выделить левой кнопкой несколько строк в JTable и по правой кнопке удалять выделенные строки из таблицы и из БД(Оракл).

На текущий момент получается, что если я выделил несколько строк, потом нажал по выделенному ПКМ, выделение снимается со всех строк кроме той, которая попала под курсор, соответственно дальше вываливается контекстное меню. В общем все как в винде хочу сделать.

MyAllDataTable.addMouseListener(new MouseAdapter() {
   @Override
   public void mouseReleased(MouseEvent event){
    if (event.getButton() == MouseEvent.BUTTON3) {
        Point point = event.getPoint();                         
            int column = MyAllDataTable.columnAtPoint(point);
            int row = MyAllDataTable.rowAtPoint(point);
            MyAllDataTable.setColumnSelectionInterval(column, column);
            MyAllDataTable.setRowSelectionInterval(row, row);
            int rowindex = MyAllDataTable.getSelectedRow();
    if (rowindex < 0)
        return;
    if (event.isPopupTrigger() && event.getComponent() instanceof JTable ) {
    JPopupMenu popup = new MyPopUpForTable();
    popup.show(event.getComponent(), event.getX(), event.getY());
    }
  }
 }
});
Answer 1

Не стал разбираться, что именно не работает в Вашем коде, и решил сразу привести пример работающего приложения, из которого Вы сами сможете взять то, что потребуется.

import javax.swing.*;
import java.util.Arrays;
public class Main extends JFrame {
    public Main() {
        String data[][] = {{"1", "Stackoverflow"}, {"2", "Ru Stackoverflow"}, {"3", "Codereview"}};
        String column[] = {"ID", "NAME"};
        JTable jTable = new JTable(data, column);
        final JPopupMenu popupMenu = new JPopupMenu();
        JMenuItem deleteItem = new JMenuItem("Delete");
        popupMenu.add(deleteItem);
        deleteItem.addActionListener(e -> System.out.println("Selected rows: " + Arrays.toString(jTable.getSelectedRows())));
        jTable.setComponentPopupMenu(popupMenu);
        JScrollPane scrollPane = new JScrollPane(jTable);
        add(scrollPane);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
    }
    public static void main(String[] args) {
        new Main();
    }
}

В данном случае выбрать несколько строк можно будет левой кнопкой мыши при нажатой Ctrl кнопке на клавиатуре, а по нажатию правую кнопку мыши появится меню с единственным вариантом Delete. Как только Вы выберете его на консоль выведет индексы выбранных строк.

Selected rows: [0, 2]

Результат выполнения будет такой:

В случае если Вы используете java старше, чем 8, то lambda выражение замените на анонимный класс:

deleteItem.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Selected rows: " + Arrays.toString(jTable.getSelectedRows()));
    }
});

Надеюсь это поможет двигаться дальше.

READ ALSO
Перевод строки форматного вида в Double

Перевод строки форматного вида в Double

Есть строка такого вида: 6356909871101D-04

266
Мониторинг EditText в Android

Мониторинг EditText в Android

Если пользователь введет текст в EditText, и в нем содержится подстрока "more", то она должна быть выделена красным

224
Как сделать курсор в EditText немигающим?

Как сделать курсор в EditText немигающим?

В приложении армянская клавиатура можно набрать армянские буквы в EditText через кнопки, в то же время активна и системная клавиатура, чтобы...

265
Вывод данных в консоль, с ее очисткой

Вывод данных в консоль, с ее очисткой

Доброго дня, коллегиЕсть один код, который выводит в консоль таблицу случайных булевых значений

243