jTable sortiert Spalte Datum falsch

MikaM

Mitglied
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

Code:
  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)
	 {
	 }
  }
 
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?
 
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.
 
Code:
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;
  }
}
 

Neue Beiträge

Zurück