2010-06-10 22 views
9

दबाकर संपादन मोड में सेल प्राप्त करना संभवतः यह एक छोटा समाधान है, लेकिन मैं अपने टेदर के अंत में हूं इसलिए मुझे उम्मीद है कि कोई भी मदद कर सकता है।JTable - टैब

मैं एक जेटीबल का उपयोग करता हूं जिसमें कस्टम रेंडरर और कॉलम के सेट के लिए एक कस्टम संपादक है।
रेंडरर एक जेएलएबल घटक का उपयोग करता है और संपादक एक जेएसपीनर घटक का उपयोग करता है।
हमारे उपयोगकर्ता कॉलम में मान दर्ज करने में सक्षम होना चाहते हैं, और फिर टेबल में अगले संपादन योग्य सेल पर जाने के लिए टैब या ENTER दबाएं।
यदि मैं सही ढंग से समझता हूं, तो यह जेटीबल के लिए डिफ़ॉल्ट व्यवहार है।

हालांकि, यह मेरे लिए सही ढंग से काम नहीं कर रहा है। जब तक उपयोगकर्ता सेल पर क्लिक नहीं करता है, केवल जेएलएबल प्रदर्शित होता है।
जेएसपीनर (यानी सेलएडिटर) केवल तब प्रदर्शित होता है जब उपयोगकर्ता सेल पर डबल क्लिक करता है। इसलिए, ऐसा लगता है कि सेल केवल माउस एवेन्ट्स पर "संपादन" मोड में जा रहा है, लेकिन जब यह फोकस नहीं करता है।

जैसे ही मैं फोकस करता हूं, सेल को संपादन मोड में जाने के लिए कैसे मिलता है?

उत्तर

4

आप इस प्रोग्रामेटिक रूप से प्राप्त कर सकते हैं, आप बस सेल पर फ़ोकस ईवेंट सुनते हैं, फ़ोकस और संपादन की अनुमति देते हैं, संपादन शुरू करते हैं।

अधिक इस thread और example

18

पर आप n00213f धन्यवाद। आपकी पोस्ट से धागा और उदाहरण सहायक थे। परिवर्तन को अधिभारित करके चयन जेडबल में थ्रेड में संकेत के रूप में विधि, जेटीबल चेक करता है कि प्रत्येक बार चयन बदल जाने पर सेल संपादन योग्य होता है या नहीं। यदि सेल संपादन योग्य है, तो यह सेल एडिटर दिखाएगा और संपादक घटक पर फ़ोकस स्थानांतरित करेगा।

JTable myTable = new javax.swing.JTable() 
    { 
      public void changeSelection(final int row, final int column, boolean toggle, boolean extend) 
      { 
       super.changeSelection(row, column, toggle, extend); 
       myTable.editCellAt(row, column); 
       myTable.transferFocus(); 
      } 
    }; 
+0

अच्छा उपयोगी था। – n002213f

2

कोड स्निपेट है कि मैं एक परियोजना है कि मैं पर काम कर रहा था के लिए एक साथ रखा है:

पूर्णता के लिए, यहाँ मेरी समाधान है। कोड को उस तालिका के लिए परीक्षण और सत्यापित किया गया है जिसमें पहले और अंतिम कॉलम में गैर-संपादन योग्य कोशिकाएं हैं। कक्षा टैबबिंग को केवल तालिका के संपादन योग्य कक्षों तक सीमित करती है। यह बदले में टैब पर शिफ्ट-टैबबिंग का भी समर्थन करता है।

public class JTableCellTabbing { 
/** 
* 
* Creates a new {@code JTableCellTabbing} object. 
* 
* 
*/ 
private JTableCellTabbing() {   
} 

/** 
* 
* Set Action Map for tabbing and shift-tabbing for the JTable 
* 
* 
* @param theTable - Jtable with NRows and MCols of cells 
* @param startRow - valid start row for tabbing [ 0 - (numRows-1) ] 
* @param numRows - Number of rows for tabbing 
* @param startCol - valid start col for tabbing [ 0 - (numCols-1) ] 
* @param numCols - Number of columns for tabbing 
*/ 
@SuppressWarnings("serial") 
static public void setTabMapping(final JTable theTable, final int startRow, final int numRows, final int startCol, final int numCols) { 
    if (theTable == null) { 
     throw new IllegalArgumentException("theTable is null"); 
    } 

    // Calculate last row and column for tabbing 
    final int endRow = startRow + (numRows - 1); 
    final int endCol = startCol + (numCols - 1); 

    // Check for valid range 
    if ((startRow > endRow) || (startCol > endCol)) { 
     throw new IllegalArgumentException("Table Size incorrect");    
    } 

    // Get Input and Action Map to set tabbing order on the JTable 
    InputMap im = theTable.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
    ActionMap am = theTable.getActionMap(); 

    // Get Tab Keystroke 
    KeyStroke tabKey = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);      
    am.put(im.get(tabKey), new AbstractAction() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      int row = theTable.getSelectedRow(); 
      int col = theTable.getSelectedColumn(); 

      col++; 

      // Move to next row and left column 
      if (col > endCol) { 
       col = startCol; 
       row++; 
      } 

      // Move to top row 
      if (row > endRow) { 
       row = startRow; 
      } 

      // Move cell selection 
      theTable.changeSelection(row, col, false, false); 
     }    
    }); 

    // Get Shift tab Keystroke 
    KeyStroke shiftTab = 
     KeyStroke.getKeyStroke(KeyEvent.VK_TAB, java.awt.event.InputEvent.SHIFT_DOWN_MASK);      
    am.put(im.get(shiftTab), new AbstractAction() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      int row = theTable.getSelectedRow(); 
      int col = theTable.getSelectedColumn(); 

      col--; 

      // Move to top right cell 
      if (col < startCol) { 
       col = endCol; 
       row--; 
      } 

      // Move to bottom row 
      if (row < startRow) { 
       row = endRow; 
      } 

      // Move cell selection 
      theTable.changeSelection(row, col, false, false); 
     }    
    });      
} 

}

और यहाँ है कि कैसे वर्ग अपनी मेज के लिए प्रयोग किया जाता है: इस सवाल का जवाब सुनने के लिए

JTable myTable = new JTable(); 
// Set up table attributes.... 
JTableCellTabbing.setTabMapping(myTable, 0, NUM_ROWS, 1, (NUM_COLS-1)); 

 संबंधित मुद्दे