Необходимо сделать так, чтобы можно было выделить левой кнопкой несколько строк в 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());
}
}
}
});
Не стал разбираться, что именно не работает в Вашем коде, и решил сразу привести пример работающего приложения, из которого Вы сами сможете взять то, что потребуется.
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()));
}
});
Надеюсь это поможет двигаться дальше.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Если пользователь введет текст в EditText, и в нем содержится подстрока "more", то она должна быть выделена красным
В приложении армянская клавиатура можно набрать армянские буквы в EditText через кнопки, в то же время активна и системная клавиатура, чтобы...
Доброго дня, коллегиЕсть один код, который выводит в консоль таблицу случайных булевых значений