2013-01-19 23 views
8

私はJTableとそのTableModelを持っていますが、それはうまくいきますが、私がやりたいことは選択されたセルを取得することです。JTable:選択したセルを取得するには?

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() //... 
    } 
} 

もちろん、このようなものは存在しません。代わりに私は何をすべきですか?

答えて

19

、あなたはあなたがのMouseListenerとのKeyListenerで、この2つの方式を組み合わせて試すことができます

JTable.getSelectedRow() 

JTable.getSelectedColumn() 

を持っています。

//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); 
} 
+0

+1です。 – Amarnath

6

:すべてのあなたが選択したセルをベクトルで多分保存したり、ArrayListをクリックするために、ユーザは、マウスリスナーで、その後、細胞を選択していることを意味し、ユーザがCtrlキーを押しているかどうかをチェックのKeyListener、と table.getSelectedRow()は選択行を取得します。

table.getSelectedColumns()が選択された列を取得します。

getValueAt(rowIndex, columnIndex)は、各列に対して選択された行に存在する値を与えます。

を使用でき
+0

私は彼が押された1つのセルだけでなく、押されたすべてのセルをキャッチしたいと思うと思う。 – BackSlash

+0

あなたは正しいかもしれない。私たちはOPの応答を待ってみましょう。 – Amarnath

+1

@Harlandrakaが正しいです。私はスプレッドシートのようなテーブルを持っていますので、多くのセルを選択できます。 – Rob

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())は、最後にクリックされた正確なセルのテーブルを返します。アプローチについては、

関連する問題