JTable

2009-10-04 21 views
8

में एक पंक्ति में ले जाने के लिए कैसे एक एक पंक्ति jTable में है कि ROW1पंक्ति 2 को जाता है स्थानांतरित कर सकते हैं इसलिए की स्थिति और पंक्ति 2ROW1 को जाता है की स्थिति?JTable

उत्तर

9

DefaultTableModel की moveRow(...) विधि का उपयोग करें।

या, यदि आप DefaultTableModel का उपयोग नहीं कर रहे हैं तो अपने कस्टम मॉडल में एक सिमलीर विधि लागू करें।

+0

धन्यवाद। क्या आप एक कोड स्निपेट प्रदान कर सकते हैं, कृपया? – Attilah

+0

मैंने नोटिस नहीं किया कि एक लिंक था। यह सहायक रहा है। धन्यवाद। – Attilah

+0

यह लिंक पुराना है –

0
TableModel model = jTable.getModel(); 
for(int col=0; col<model.getColumnCount(); col++) { 
    Object o1 = model.getValueAt(row1, col); 
    Object o2 = model.getValueAt(row2, col); 
    model.setValueAt(o1, row2, col); 
    model.setValueAt(o2, row1, col); 
} 
2

यहां मेरा कोड है जिसे मैंने अभी इस प्रश्न में उत्तर का उपयोग करके विकसित किया है। उन फ़ंक्शंस के साथ आप एक समय में कई पंक्तियों का चयन कर सकते हैं और उन्हें JTable में नीचे या ऊपर ले जा सकते हैं। मैंने उन फ़ंक्शन को JButton से जोड़ा है, लेकिन मैं उन्हें अधिक पठनीय बनाने के लिए उन्हें साफ़ करता हूं।

दोनों विधि (setRowSelectionInterval()) की अंतिम कोड पंक्ति को स्थानांतरित होने पर चयन का पालन करने के लिए उपयोग किया जाता है, क्योंकि moveRow() चयन को स्थानांतरित नहीं करता है लेकिन पंक्ति की सामग्री को स्थानांतरित नहीं करता है।

public void moveUpwards() 
{ 
    moveRowBy(-1); 
} 

public void moveDownwards() 
{ 
    moveRowBy(1); 
} 

private void moveRowBy(int by) 
{ 
    DefaultTableModel model = (DefaultTableModel) table.getModel(); 
    int[] rows = table.getSelectedRows(); 
    int destination = rows[0] + by; 
    int rowCount = model.getRowCount(); 

    if (destination < 0 || destination >= rowCount) 
    { 
     return; 
    } 

    model.moveRow(rows[0], rows[rows.length - 1], destination); 
    table.setRowSelectionInterval(rows[0] + by, rows[rows.length - 1] + by); 
}