2015-03-03 21 views
8

JTable'da Sıralama için arama yapıyordum ve birçok makaleye atıfta bulundum, ancak tabloyu sıralamanın en kolay yolunu bulamadım. Ayrıca, TableRowSorter'un bir şekilde yardımcı olabileceğini biliyorum ama nasıl olduğunu bilmiyorum. JTable'a yeni geliyorum, burada yeni bir soru oluşturuyorum.JTable nasıl en kısa şekilde sıralanır?

Benim tablo yapısı ("Mansiyonlar") 4 sütuna dayalı Azalan bu

| People | Place | Organisation | Event | Mentions | 
_____________________________________________________________ 
| Ramanuj | India | Tata Consultancy | Party'14 | 500000 | 
| Prankster | USA | Microsoft Pvt Ltd | Party'14 | 900000 | 

Benim burada istiyorum benim tabloyu sıralamak gibi bir şeydir. sayımları (Mansiyonlar) aynıysa, bunu, ona emin misiniz? ("İnsanlar")

CSVReader reader = new CSVReader(new FileReader(file)); 

List<String[]> myEntries = reader.readAll(); 
String[][] rowData = myEntries.toArray(new String[0][]); 

String[] columnNames = { "People", "Place", "Organisation", "Event", "Mentions" }; 

DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames); 

cevap

18

olarak

Güncelleme

JTable table = new JTable(tableModel); 
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()); 
table.setRowSorter(sorter); 

List<RowSorter.SortKey> sortKeys = new ArrayList<>(25); 
sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING)); 
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); 
sorter.setSortKeys(sortKeys); 

How to Use Tables: Sorting and Filtering başına 1 sütuna göre Artan sıralanması gerekir sıralanacak mı

... Evet

Table

import java.awt.EventQueue; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.RowSorter; 
import javax.swing.SortOrder; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 
import javax.swing.table.TableRowSorter; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       DefaultTableModel model = new DefaultTableModel(new String[]{"People", "Place", "Organisation", "Event", "Mentions"}, 0); 
       model.addRow(new Object[]{"Prankster", "USA", "Microsoft Pvt Ltd", "Party'14", 900000}); 
       model.addRow(new Object[]{"Ramanuj", "India", "Tata Consultancy", "Party'14", 500000}); 
       model.addRow(new Object[]{"Banana", "India", "Tata Consultancy", "Party'14", 500000}); 

       JTable table = new JTable(model); 
       TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()); 
       table.setRowSorter(sorter); 

       List<RowSorter.SortKey> sortKeys = new ArrayList<>(25); 
       sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING)); 
       sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); 
       sorter.setSortKeys(sortKeys); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new JScrollPane(table)); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

... Doğrudan görünümden verileri çıkarabilir

Güncelleme

for (int row = 0; row < table.getRowCount(); row++) { 
    String people = table.getValueAt(row, 0).toString(); 
    String place = table.getValueAt(row, 1).toString(); 
    String organisation = table.getValueAt(row, 2).toString(); 
    String event = table.getValueAt(row, 3).toString(); 
    int mentions = (int)table.getValueAt(row, 4); 
    //... 
} 

Bu, "görünüm" (veya sıralanmış) siparişindeki verileri size verecektir ...

+0

Sıralamadan emin misiniz? Çünkü sütun 4'üm için denedim, DESCENDING tutarak ve TableModel'i işaretledim. Hala aynı. Yenilemeye mi ihtiyacım var? – Pratik

+0

Evet. Ama dikkat, bir 'String' (bir sayıyı temsil eder) sıralama ve gerçek bir sayı sıralamak farklı sonuçlar verecektir ... – MadProgrammer

+0

Model değişken üzerinde gezinme kontrol ediyorum. Onunla aynı. Orada yansıtmayacak mı? Eğer değilse, güncel olanı nerede görebilirim? – Pratik