Swing Tabelle nach Datumsspalte sortieren

Thallius

Top Contributor
Hi,

ich habe eine Tabelle, die in der ersten Spalte den Monat anzeigt. Ich möchte nun gerne diese Spalte auch sortieren können indem ich auf den den Spaltenheader klicke. Und zwar eben nicht alphabetisch sondern nach Datum. Sprich Januar, Februar, März... und anders herum Dezember, November, Oktober...
(Die Tabelle ist noch um einige Spalten größer aber die tun hier jetzt nichts zur Sache und ich versuche das Ganze so kompakt wie möglich darzulegen)

Diese Tabelle hat ein Model

Java:
	class MonthListTableModel extends AbstractTableModel 
	{
		private ArrayList<MonthListTableEntry> list;
		
		public MonthListTableModel(CheckYear checkYear) // (CheckYear enthält ein int mit dem Jahr und ein String[12] mit Einträgen die zu dem jeweiligen Monat gehören. Tut hier aber auch nichts zur Sache)
		{
			this.list=new ArrayList<MonthListTableEntry>();
			
			for(int i=0;i<12;i++)
			{
				MonthListTableEntry entry=new MonthListTableEntry(i,checkYear);
				this.list.add(entry);
			}
		}
                // (hier kommen jetzt die ganzen zu implementierenden Funktionen. Sind aber für das Problem nicht relevant)

Der TableEntry dazu sieht so aus

Java:
	class MonthListTableEntry
	{
		public String dateString;
		public String month;
		private int monthIndex; // (Nach dem Index möchte ich die Einträge später sortieren wenn nach der Monatsspalte sortiert werden soll)
		
		public MonthListTableEntry(int monthIndex, CheckYear checkYear)
		{
			this.monthIndex=monthIndex;
			this.month=formatMonth(monthIndex); // (Gibt den Monatsnamen als String zurück)
			
			if(checkYear.checkFileName[monthIndex]!=null)
			{
                                this.dateString="Egal";
			}
			else
				this.dateString="<not set>";
		}
	}

Jetzt kommen wir zu dem eigentlich Teil. Mein Rowsorter mit Comparator sieht so aus:

Java:
		this.monthListTableModel=new MonthListTableModel(this.checkList.yearList.get(0));
		this.monthListTable = new JTable(this.monthListTableModel);
				
		TableRowSorter<MonthListTableModel> rowSorter = new TableRowSorter<MonthListTableModel>(monthListTableModel);
	            rowSorter.setComparator(0, new Comparator<MonthListTableEntry>() 
	            {
	                public int compare(MonthListTableEntry o1, MonthListTableEntry o2) 
	                {
	                	return o1.monthIndex-o2.monthIndex;
	                }
	            });
		this.monthListTable.setRowSorter(rowSorter);
		this.monthListTable.getRowSorter().toggleSortOrder(0); // <- Exception

leider bekomme ich eine Exception

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to gui.ProtocolPanel$MonthListTableEntry

bei der letzten Zeile. Mein Comparator scheint also irgendwie einen String zu erwarten oder zu bekommen oder was auch immer.

Was mache ich also falsch?

Danke

Claus
 

knilch

Bekanntes Mitglied
Hi,
nur mal eine Frage...
Du greifst in
Java:
        TableRowSorter<MonthListTableModel> rowSorter = new TableRowSorter<MonthListTableModel>(monthListTableModel);
                rowSorter.setComparator(0, new Comparator<MonthListTableEntry>()
                {
                    public int compare(MonthListTableEntry o1, MonthListTableEntry o2)
                    {
                        return o1.monthIndex-o2.monthIndex;
                    }
                });
auf die variable monthIndex zu... aber in der Klasse: MonthListTableEntry ist diese Variable private. Solltest du hier nicht setters und getters haben und dann in der compare methode so darauf zugreifen?
Oder du implementierst das Comparator Interface in MonthListTableEntry und kannst dann direkt auf dies monthIndex zugreifen...
nur so eine idee...
 

Thallius

Top Contributor
Ja stimmt eigentlich müßte das sogar einen Error geben. Naja ich bin mir mitlerweile sicher, dass es so überhaupt nicht geht, da der Sorter den Comperator mit dem Wert aufruft, den ich im Model bei getValueAt() zurück gebe. Da ich dort aber den dateString zurück gebe kann das nicht klappen. ebe ich aber den MonthListTableEntry zurück, dann sortiert er zwar richtig, dafür zeigt er dann natürlich Quatsch an. Ich müßte dann wohl noch einen eigenen Renderer schreiben, der entsprechend dann meinen dateString aus dem MonthListTableEntry benutzt...

Ist das denn wirklich so schwer? Ich könnte mir vorstellen, dass das häufig gebraucht wird und im Netz gibt es dazu kein einziges leicht verständliches Beispiel. Oder ich finde es nur einfach nicht....

Gruß

Claus
 

Thallius

Top Contributor
So

ich habe jetzt den Ansatz geändert. Ich habe nun einen DefaultRenderer gebaut.

Java:
   private static class DateRenderer extends DefaultTableCellRenderer 
    {
		private static final long serialVersionUID = 1L;

		public DateRenderer()
        {
            super();
        }

        @Override
        public void setValue(Object value) 
        {
            setText((value == null) ? "" : ((MonthListTableEntry)value).month);
        }
    }

und im MonthListTableModel mache ich dann

Java:
	    public Object getValueAt(int row, int col) 
	    {
	    	if(col==0)
	    		return list.get(row);
	        return list.get(row).dateString;
	    }

Wenn ich nun den Renderer mit

Java:
monthListTable.setDefaultRenderer(MonthListTableEntry.class, new DateRenderer());

instaqlliere, dann wird er nicht aufgerufen!

Mache ich NUR ZUM TESTEN ein

Java:
monthListTable.setDefaultRenderer(Object.class, new DateRenderer());

dann wird er aufgerufen und funktioniert auch einwandfrei. Nur wird er dann natuerlich mit jeder Column aufgerufen und nicht nur mit meiner ersten.

Warum klappt es nicht wenn ich den Renderer nur für meine MonthListTableEntry.class setze ?

Gruß

Claus
 

Thallius

Top Contributor
So,

nachdem ich nun in dem Model noch

Java:
public Class getColumnClass(int colf) 
{
    if(col==0)
        return MonthListTableEntry.class;
    return String.class;
  }

eingefügt habe klappt alles.

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
K Tabelle nach JOptionPane updaten AWT, Swing, JavaFX & SWT 5
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2
D Zahlen mit nullen in einer Tabelle anzeigen AWT, Swing, JavaFX & SWT 2
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben