私はJTableとそのTableModelを持っていますが、うまく機能しますが、私がやりたいのは、選択されたセルを取得することです。私は何かをすることを考えました:
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() //...
}
}
しかしもちろん、このようなものは存在しません。代わりに何をすべきですか?
JTableには、
JTable.getSelectedRow()
そして
JTable.getSelectedColumn()
この2つのメソッドをMouseListenerおよびKeyListenerと組み合わせて試すことができます。 KeyListenerを使用して、ユーザーがCTRLキーを押しているかどうかを確認します。つまり、ユーザーがセルを選択していることを確認し、マウスリスナーを使用して、クリックするたびに選択したセルをVectorまたはArrayListに保存します。
//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() は選択された行を取得します。
table.getSelectedColumns() は選択された列を取得します。
getValueAt(rowIndex、columnIndex) は、各列の選択された行に存在する値を示します。
JTableには 選択した行を取得する および 選択した列を取得する のメソッドがあります。
以下を使用できます。
_int row = table.rowAtPoint(e.getPoint());
int col = table.columnAtPoint(e.getPoint());
_
(table.getSelectedRow()
and table.getSelectedColumn()
)を使用して行と列を取得できますが、複数のセルを選択した場合は、メソッドtable.getSelectedRow()
およびtable.getSelectedColumn()
クリックされた最初のセルのセルの位置を返します。
一方、table.rowAtPoint(e.getPoint())
およびtable.columnAtPoint(e.getPoint())
は、最後にクリックされた正確なセルのテーブルを返します。