9

我有一个 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() //...
    }
}

当然,这样的事情是不存在的。我应该怎么做?

4

4 回答 4

22

在 JTable 中,您有

JTable.getSelectedRow()

JTable.getSelectedColumn()

您可以尝试将这两种方法与 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);
}
于 2013-01-19T16:30:59.590 回答
7

table.getSelectedRow()将获得选定的行。

table.getSelectedColumns()将获取选定的列。

getValueAt(rowIndex, columnIndex)将给出每列的选定行的值。

于 2013-01-19T16:31:45.860 回答
3

JTable 具有获取选定行选定列的方法。

于 2013-01-19T16:29:02.970 回答
0

您可以使用:

int row = table.rowAtPoint(e.getPoint());
int col = table.columnAtPoint(e.getPoint());

table.getSelectedRow()您可以使用 (和)获取行和列,table.getSelectedColumn()但如果您选择了多个单元格,则该方法table.getSelectedRow()table.getSelectedColumn()返回单击的第一个单元格的单元格位置。

另一方面,table.rowAtPoint(e.getPoint())返回table.columnAtPoint(e.getPoint())最后一次单击的确切单元格的表格。

于 2016-07-13T17:14:41.513 回答