Reputation: 15982
I have a JTable and its TableModel, it works well but what I want to do now is to get the selected cells of it. I thought of doing something like :
int rows = this.getTable().getRowCount();
int columns = this.getTable().getColumnCount();
for(int i = 0 ; i < rows ; i++)
{
for(int j = 0 ; j < columns ; j++)
{
if(table.getCell(i,j).isSelected() //...
}
}
But of course something like this doesn't exist. What should I do instead?
Upvotes: 10
Views: 61030
Reputation: 29
You can use:
int row = table.rowAtPoint(e.getPoint());
int col = table.columnAtPoint(e.getPoint());
You can get the row and column with ( table.getSelectedRow()
and table.getSelectedColumn()
) but if you selected more than one cell the method table.getSelectedRow()
and table.getSelectedColumn()
return cell's position of the first cell that was clicked.
On the other hand, table.rowAtPoint(e.getPoint())
and table.columnAtPoint(e.getPoint())
return the exact cell's table that was clicked for the last time.
Upvotes: 0
Reputation: 22233
In JTable, you have the
JTable.getSelectedRow()
and
JTable.getSelectedColumn()
You can try combine this two method with a MouseListener and a KeyListener. With the KeyListener you check if user is pressing the CTRL key, which means that user is selecting cells, then with a mouse listener, for every click you store maybe in a Vector or ArrayList 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);
}
Upvotes: 24
Reputation: 8855
table.getSelectedRow() will get selected row.
table.getSelectedColumns() will get selected columns.
getValueAt(rowIndex, columnIndex) will give the value present at the selected row for each column.
Upvotes: 7
Reputation: 25140
JTable has methods to get the selected rows and get the selected columns.
Upvotes: 3