# jTable sortiert Spalte Datum falsch



## MikaM (26. August 2009)

Hallo User,

Anfangerfrage! Ich lese aus einer Datei *.csv ein String für das Datum ein (z.B. 02.03.2009). Ich erstelle ein Objekt zur Übergabe an das model. Mache aus dem Datumstring ein Objekt Date. Leider wird beim Click auf den Tabellenkopf der Wert der Spalte Datum wie ein String behandelt. Wenn ich FORMATTER4 nicht benutze und myDate übergebe, wird zwar richtig sortiert, aber die Anzeige ist nicht die gewünschte deutsche Schreibweise. Was mache ich Falsch? Für jede Antwort bin ich dankbar. Gruß MikaM


```
void empf_import(String FileName)
  {
    SimpleDateFormat FORMATTER4 = new SimpleDateFormat ("dd.MM.yyyy");
	 SimpleDateFormat df = null;
	 String line;
	 String[] line2 = new String[50];
	 int var = 1;
	 try
	 {
		BufferedReader in = new BufferedReader(new FileReader(FileName));
		while ( (line = in.readLine()) != null)
		{
		  line2[var] = line;
		  var++;
		}
		in.close();

		df = (SimpleDateFormat) DateFormat.getDateInstance();
		Date myDate = null;
		try
		{
                 // z.B. line2[8] = "02.03.2009"
		  myDate = df.parse(line2[8]);
		  /**
			* FORMATTER4.format(myDate) hier liegt der Fehler,
			* ist kein Datum mehr sondern String,
			* bei Ersätzen mit myDate t es, aber englische anzeige
		  	*/
	 Object[] data_add =  { line2[29], FORMATTER4.format(myDate), line2[5], line2[6];
		  model.addRow(data_add);
		} catch (ParseException ex)
		{
				}
	 } catch (IOException e)
	 {
	 }
  }
```


----------



## zeja (26. August 2009)

Gewöhn dir bitte an deinen Variablen ordentliche Namen zu geben.

In deiner Tabelle solltest du immer die Originaldaten halten, sprich dein Date Objekt. Für die Anzeige ist der Renderer zuständig. Lies dir am Besten mal folgendes durch:
http://openbook.galileocomputing.de...16_018.htm#mj1acc7779700a8d265b567f5261c12453


----------



## MikaM (26. August 2009)

... mache ich. Werde ich mir durchlesen. Danke


----------



## MikaM (26. August 2009)

Habe mich noch einmal mit dem Renderer beschäftigt. Habe für Double dies schon angewendet. Der Konstruk des Renderer ist die saubere Programmierung gegenüber meinem Code, klar. Aber von der Sache her, kann ich keinen "Unterschied" erkennen. In meinem Code bleibt ja das Datum von Objekt Date und die Anzeige wird durch FORMATTER4.format(myDate) erzeugt. Also was ist das anderst? Liege ich da vollkommen falsch, mit meiner Ansicht?


----------



## zeja (26. August 2009)

Wie schaut denn dein Code nun aus?

Der Unterschied ist, dass zum sortieren noch das original Objekt da ist. Date implementiert Comparable. compareTo kann also hier zum korrekten sortieren verwendet werden. Wogegen eine Sortierung über Strings im Falle eines Datum natürlich keinen Sinn macht.


----------



## MikaM (26. August 2009)

```
public class SetDateTableCellRenderer extends DefaultTableCellRenderer implements InterfaceMath
{
    public Component getTableCellRendererComponent(final JTable table, final
	  Object value, boolean isSelected, boolean hasFocus, int row, int column)
  {

JLabel c = (JLabel)super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );

		if (value instanceof Calendar)
		{
		  SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy ");
		  c.setText(df.format( ( (Calendar) value).getTime()));
		}
		 
	 return c;
  }
}
```


----------

