JTable sortieren

Morgen Saban,

der Index ist einfach nur der Spaltenindex (also welche Spalte mit dem Datumscomparator belegt werden soll).
Der Rowsorter wird der JTable hinzugefügt. Das setzen des Comparators und Rowsorters sollte bei der initialisierung der Tabelle erledigt werden.


Grüße
R.
 
Zuletzt bearbeitet:
Hi Ritchie_Fomm!

also ich hab
Java:
TableRowSorter oRowSorter = new TableRowSorter(tabellenModel);
tabelle.setRowSorter(oRowSorter);
oRowSorter.setComparator(0, new DateStringComparator());

Dann bekomm ich des Warning
Java:
Multiple markers at this line
	- TableRowSorter is a raw type. References to generic type TableRowSorter<M> should be parameterized
	- TableRowSorter is a raw type. References to generic type TableRowSorter<M> should be parameterized
	- Type safety: The constructor TableRowSorter(TableModel) belongs to the raw type TableRowSorter. References to 
	 generic type TableRowSorter<M> should be parameterized

und die Exception:
Java:
Exception in thread "main" java.lang.IndexOutOfBoundsException: column beyond range of TableModel
	at javax.swing.DefaultRowSorter.checkColumn(Unknown Source)
	at javax.swing.DefaultRowSorter.setComparator(Unknown Source)
	at GUI_Tool.BK_Table.<init>(BK_Table.java:35)
	at GUI_Tool.BK_Frame.<init>(BK_Frame.java:42)
	at GUI_Tool.BK_Main.main(BK_Main.java:8)

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Morgen,

hattest du denn schon Spalten hinzugefügt! Es sieht hier so aus als wenn du noch keine Spalten dem Tablemodel zugeordnet hast.

Grüße
R.
 
Hi!

also ich benutz ein Interface in dem meine Spaltennamen drin stehen. Muss ich des vllt auch wie Akeshihiro machen?

also
Java:
model.addRow(new String[] {"22.01.2009"});           
model.addRow(new String[] {"21.02.2009"});            
model.addRow(new String[] {"06.03.2009"});            
model.addRow(new String[] {"22.05.1989"});

MfG
Saban
 
Morgen,

wie du siehst wird auch bei Akeshihiro der Sorter erst nach der initialisierung der Spalten. gesetzt.
Code:
DefaultTableModel model = new DefaultTableModel(new String[][]{},
new String[]{"Datum"});

Danach müsstest du auch den Sorter mit Comparator setzen können.

Grüße
R.
 
Hi!

Hab den Code nur an der falschen Stelle reingesetzt gehabt...
Es wird nicht sortiert :confused:
Das selbe Problem besteht!

MfG
Saban
 
Zuletzt bearbeitet:
Dann zeig doch nochma bissel source code. Wo du die Tabelle erstellst, wo du Daten hinzufuegst und wo du den Rowsorter hinzufuegst.
 
Hi!

tut mir leid das ich jetzt erst Poste!

Also ich hab den Code vom Ritchie_Fomm übernommen:
Java:
class DateStringComparator implements Comparator<String>
{
	public int compare(String strDate1, String strDate2) 
	{
		SimpleDateFormat dateFormat1 = new SimpleDateFormat("dd.MM.yyyy HH:mm");
		SimpleDateFormat dateFormat2 = new SimpleDateFormat("dd.MM.yyyy HH:mm");
		
		try 
		{
			if(strDate1 == null || strDate2 == null)
				return 0;
			
			if(strDate1.length() <= 11)
				dateFormat1 = new SimpleDateFormat("dd.MM.yyyy");
			
			if(strDate2.length() <= 11)
				dateFormat2 = new SimpleDateFormat("dd.MM.yyyy");
			
			Date date1 = (Date) dateFormat1.parse(strDate1);
			Date date2 = (Date) dateFormat2.parse(strDate2);
			
			return date1.compareTo(date2);
		}
		catch (ParseException e) 
		{
			e.printStackTrace();
		}
		
		return 0;
	}
}

und den Teil hier in meiner Tabellen-Klasse hinzugefügt:
Java:
		tabellenModel = new DefaultTableModel(rowData, COLUMNNAMES){
			public boolean isCellEditable(int row, int column){
				if(column == 9){
					return true;	
				} else {
					return false;
				}
			}
		};
		
		TableRowSorter oRowSorter = new TableRowSorter(tabellenModel);
		tabelle.setRowSorter(oRowSorter);
		oRowSorter.setComparator(1, new DateStringComparator());

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

wie es aussieht hast du das TableModel noch nicht der Tabelle hinzugefügt.

Gruß

Sascha
 
Zurück