In JTable you have
JTable.getSelectedRow()
and
JTable.getSelectedColumn()
You can try combining this two methods with MouseListener and KeyListener. Using KeyListener, you check whether the user has pressed the CTRL key, which means that the user selects the cells, and then with the mouse listener, for each click that you store, possibly in Vector or ArrayList for the selected cells:
//global variables JTable theTable = new JTable();//your table boolean pressingCTRL=false;//flag, if pressing CTRL it is true, otherwise it is false. Vector selectedCells = new Vector<int[]>();//int[]because every entry will store {cellX,cellY} public void something(){ KeyListener tableKeyListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_CTRL){//check if user is pressing CTRL key pressingCTRL=true; } } @Override public void keyReleased(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_CTRL){//check if user released CTRL key pressingCTRL=false; } } }; MouseListener tableMouseListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(pressingCTRL){//check if user is pressing CTRL key int row = theTable.rowAtPoint(e.getPoint());//get mouse-selected row int col = theTable.columnAtPoint(e.getPoint());//get mouse-selected col int[] newEntry = new int[]{row,col};//{row,col}=selected cell if(selectedCells.contains(newEntry)){ //cell was already selected, deselect it selectedCells.remove(newEntry); }else{ //cell was not selected selectedCells.add(newEntry); } } } }; theTable.addKeyListener(tableKeyListener); theTable.addMouseListener(tableMouseListener); }
Backslash
source share