2015-03-03 12 views
8

Ich suchte nach Sortierung in JTable und ich bezog viele Artikel, aber konnte nicht den einfachsten Weg, die Tabelle zu sortieren. Ich weiß auch, dass TableRowSorter könnte irgendwie hilfreich sein, aber weiß nicht wie. Da ich neu bei JTable bin, erstelle ich hier eine neue Frage.Wie sortiere ich JTable auf kürzestem Weg?

Meine Tabellenstruktur ist so etwas wie dieses

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

Was ich hier will, ist mein Tisch zu sortieren auf der 4. Spalte basiert abwärts („Mentions“). Wenn Zählungen (Mentions) gleich sind, sollte es Aufsteigend nach der 1. Säule ("Menschen")

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); 

Antwort

18

Per How to Use Tables: Sorting and Filtering

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); 

Aktualisiert sortieren

Sind Sie sicher, dass es wird sortieren?

... Ja

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); 
      } 
     }); 
    } 

} 

Aktualisiert

Sie die Daten direkt aus der Sicht extrahieren kann ...

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); 
    //... 
} 

Damit erhalten Sie die Daten in der "Ansicht" (oder sortiert) Reihenfolge ...

+0

Sind Sie sicher, dass es sortieren wird? Ursache Ich versuchte nur für meine Spalte 4, DESCENDING behalten und TableModel überprüft. Es ist immer noch dasselbe. Muss ich auffrischen oder etwas? – Pratik

+0

Ja. Aber pass auf, sortiere ein 'String' (das eine Zahl darstellt) und sortiere eine aktuelle Zahl, so ergeben sich unterschiedliche Ergebnisse ... – MadProgrammer

+0

Ich überprüfe das Schweben auf der Modellvariablen. Es ist gleich dort. Wird es sich nicht dort widerspiegeln? Wenn nicht, wo kann ich aktualisierte sehen? – Pratik