2011-03-25 25 views
8

मैं जेटीबल्स के साथ काम कर रहा हूं जो उपयोगकर्ता फ़िल्टर कर सकते हैं, और यदि उपयोगकर्ता फ़िल्टरिंग के बाद सहेजता है तो मैं फ़िल्टर किए गए टेबल को दृढ़ता के लिए टेक्स्टफाइल में सहेजना चाहता हूं (जिसका मतलब है कि फ़िल्टर किए गए कुछ भी टेक्स्टफाइल में सहेजे नहीं जाएंगे) ।मैं फ़िल्टर किए गए मॉडल को कैसे प्राप्त कर सकता हूं?

फ़िल्टरिंग के लिए मैंने अभी इस ट्यूटोरियल के फ़िल्टरिंग हिस्से का पालन किया है: http://download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting और यह ठीक काम करता है, लेकिन मुझे यकीन नहीं है कि मैं मौजूदा प्रदर्शन का मॉडल प्राप्त कर सकता हूं क्योंकि अंतर्निहित मॉडल के विपरीत जिसे फ़िल्टर नहीं किया गया है।

क्या इस तरह से इसे फ़िल्टर करने के तरीके से ऐसा करने का कोई तरीका है?

धन्यवाद!

उत्तर

15

तालिका को इसकी पंक्तियों की संख्या (getRowCount() का उपयोग करके) से पूछें, जो फ़िल्टर की गई (दृश्यमान) पंक्तियों की संख्या वापस कर देगा। 0 से rowCount तक Iterate, convertRowIndexToModel() का उपयोग करके प्रत्येक पंक्ति अनुक्रमणिका को मॉडल इंडेक्स में परिवर्तित करें, और फ़िल्टर किए गए (दृश्यमान) डेटा की सूची बनाने के लिए प्रत्येक मॉडल इंडेक्स पर अपने मॉडल से डेटा पूछें।

0

यह कोड दिखाता है कि यह कैसे करें। कृपया ध्यान दें कि बटन दबाए जाने के बाद इनपुट में बी पंक्ति मुद्रित नहीं होती है।

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.RowFilter; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 
import javax.swing.table.TableRowSorter; 
import javax.swing.JButton; 
import java.awt.BorderLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class JTableFilterDemo { 
    public static void main(String[] args) { 
     Object[][] data = { { "A", 5 }, { "B", 2 }, { "C", 4 }, { "D", 8 } }; 
     String columnNames[] = { "Item", "Value" }; 
     TableModel model = new DefaultTableModel(data, columnNames) { 
      public Class<?> getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     JTable table = new JTable(model); 

     RowFilter<Object, Object> filter = new RowFilter<Object, Object>() { 
      public boolean include(Entry entry) { 
       Integer population = (Integer) entry.getValue(1); 
       return population.intValue() > 3; 
      } 
     }; 

     TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(
       model); 
     sorter.setRowFilter(filter); 
     table.setRowSorter(sorter); 
     JScrollPane scrollPane = new JScrollPane(table); 
     JFrame frame = new JFrame("Filtering Table"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton btnNewButton = new JButton("Print values"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       for(int row = 0;row < table.getRowCount();row++) { 
        System.out.println(table.getModel().getValueAt(table.convertRowIndexToModel(row), 0)); 
       } 
      } 
     }); 
     frame.getContentPane().add(btnNewButton, BorderLayout.SOUTH); 
     frame.getContentPane().add(scrollPane); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
    } 
} 
+2

क्यों अन्य धागे को हाइजैक – mKorbel