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()

この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);
}
于 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 に答える