2013-01-19 44 views
8

मेरे पास एक जेटीबल और इसकी टेबल मॉडल है, यह अच्छी तरह से काम करता है लेकिन अब मैं जो करना चाहता हूं वह है चयनित कोशिकाओं को प्राप्त करना। मैंने कुछ ऐसा करने का विचार किया:जेटीबल: चयनित कोशिकाओं को कैसे प्राप्त करें?

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

JTable में, आप

JTable.getSelectedRow() 

और

JTable.getSelectedColumn() 

आप एक MouseListener और एक KeyListener के साथ इस दो विधि गठबंधन की कोशिश कर सकते हैं। KeyListener यदि उपयोगकर्ता CTRL कुंजी दबाने है आप जांच, जिसका अर्थ है कि उपयोगकर्ता एक माउस श्रोता के साथ कोशिकाओं को चुन रही है, तो, के लिए हर क्लिक करके आपको वेक्टर में हो सकता है की दुकान या सेल चयनित 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); 
} 
+0

+1। – Amarnath

6

table.getSelectedRow() चयनित पंक्ति मिलेगी।

table.getSelectedColumns() चयनित कॉलम प्राप्त होंगे।

getValueAt(rowIndex, columnIndex) प्रत्येक कॉलम के लिए चयनित पंक्ति पर मूल्य प्रदान करेगा।

+0

मुझे लगता है कि वह सभी दबाए गए कोशिकाओं को पकड़ना चाहता है, न केवल एक दबाए गए सेल – BackSlash

+0

ठीक है, हो सकता है कि आप सही हों। आइपी प्रतिक्रिया के लिए प्रतीक्षा करें। – Amarnath

+1

@ हर्लैंड्राका सही है, मेरे पास एक स्प्रेडशीट की तरह एक टेबल है, इसलिए मैं कई सेल्स चुन सकता हूं। – 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()) पिछली बार क्लिक की गई सटीक सेल तालिका को वापस कर दें। दृष्टिकोण के लिए