J'ai un JTable et son TableModel, cela fonctionne bien, mais ce que je veux faire maintenant, c'est en obtenir les cellules sélectionnées. J'ai pensé faire quelque chose comme:
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() //...
}
}
Mais bien sûr, quelque chose comme ça n'existe pas. Que devrais-je faire à la place?
Dans JTable, vous avez le
JTable.getSelectedRow()
et
JTable.getSelectedColumn()
Vous pouvez essayer de combiner ces deux méthodes avec un MouseListener et un KeyListener. Avec le KeyListener, vous vérifiez si l'utilisateur appuie sur la touche CTRL, ce qui signifie qu'il sélectionne des cellules peut-être stocker dans un vecteur ou ArrayList les cellules sélectionnées:
//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);
}
table.getSelectedRow () obtiendra la ligne sélectionnée.
table.getSelectedColumns () obtiendra les colonnes sélectionnées.
getValueAt (rowIndex, columnIndex) donnera la valeur présente dans la ligne sélectionnée pour chaque colonne.
JTable a des méthodes pour obtenir les lignes sélectionnées et obtenir les colonnes sélectionnées .
Vous pouvez utiliser:
int row = table.rowAtPoint(e.getPoint());
int col = table.columnAtPoint(e.getPoint());
Vous pouvez obtenir la ligne et la colonne avec (table.getSelectedRow()
et table.getSelectedColumn()
), mais si vous avez sélectionné plusieurs cellules, les méthodes table.getSelectedRow()
et table.getSelectedColumn()
renvoient la position de la première cellule sur laquelle la cellule a été cliquée.
De même, table.rowAtPoint(e.getPoint())
et table.columnAtPoint(e.getPoint())
renvoient la table de la cellule exacte sur laquelle vous avez cliqué pour la dernière fois.