2010-12-28 8 views
1

Ich habe ein abstraktes Tabellenmodell definiert, aber eine der Spalten sollte Datumswerte enthalten als TT/MM/JJJJ-Format nicht sicher, wie dies zu tun ist.Definieren eines TT/MM/JJJJ-Feldes innerhalb eines abstrakten Tabellenmodells

Ich habe eine externe globale Datei und habe die Daten als TT/MM/JJJJ hart codiert.

Wie kann ich diese Spalte in meinem abstrakten Tabellenmodell so definieren, dass nur Daten mit dem Format TT/MM/JJJJ nur zulässig sind.

public class OptraderGlobalParameters 
{ 


    public static boolean DEBUG = true; //Set DEBUG = true for Debugging 

    /*=========================*/ 
    /*Table Array For Dividends*/ 
    /*=========================*/ 
    public static String[] columnNames 
       = {"Date", 
       "Dividend", 
       "Actual", 
       "Yield (%)" 
       }; 



    public static Object[][] data 
    = { {"dd/mm/yyyy", new Double(5), new Boolean(false), new Boolean(false)}, 
     {"dd/mm/yyyy", new Double(5), new Boolean(false), new Boolean(false)}, 
     {"dd/mm/yyyy", new Double(5), new Boolean(false), new Boolean(false)}, 
     {"dd/mm/yyyy", new Double(5), new Boolean(false), new Boolean(false)}, 
     {"dd/mm/yyyy", new Double(5), new Boolean(false), new Boolean(false)}, 
     }; 



} 
+2

Ich bin mir nicht sicher, was dein Problem ist, aber ich möchte nur erwähnen, dass "mm" für Minuten steht, nicht für Monate. Sie möchten MM für Monate verwenden. Siehe auch ['SimpleDataFormat' javadoc] (http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html). – BalusC

Antwort

1

Sie sollten nicht Ihre Benutzer beschränken, nur weil das Format speichern Sie die Daten in. Haben Sie Ihren Tisch Modelleingang Parse Benutzer in einem Date-Objekt und verwenden nur ein Simple das Datum zu formatieren Sie Ihre Dateispeicher entsprechen.

Wenn Sie eine Validierung benötigen, schauen Sie sich Zelleditoren an oder erlauben Sie dem Benutzer nicht, zum nächsten Schritt zu gehen, wenn sie schlechte Daten eingeben.

+0

Können Sie mir bitte sagen, wie ich das machen soll, da ich keine Ahnung habe, wie. grüße simon –

+0

Welcher Teil? Kannst du viel genauer sagen, was du versucht hast und womit du Probleme hast? – jzd

0

Es klingt, als ob Sie sicherstellen möchten, dass, wenn jemand eine Zeile zu Ihrer Tabelle hinzufügt oder eine Zeile ändert, sie nur das Format TT/MM/JJJJ und nicht nur irgendeinen beliebigen String verwenden können.

Wenn das der Fall ist, würde ich vorschlagen, eine neue Klasse

public class OptraderInfo{ 
private String date; 
private Double dividend; 
// etc 

private void setDate(String newDate){ 
    // Insert logic checking the newDate format here 
    date = newDate; 
} 
} 

erstellen und dann Ihre Datentabelle zu ändern enthalten Instanzen von OptraderInfo

public static OptraderInfo[] data = new OptraderInfo[5]; 

Bedenken Sie auch eine Arraylist statt einer Verwendung einfaches Array. Das erleichtert das Hinzufügen und Entfernen von Objekten.

public static ArrayList<OptraderInfo> data = new ArrayList<OptraderInfo>(5); 
+0

okay, werde ich versuchen, vielen Dank –

1

zu verlängern, was Oleg, schrieb, um Ihnen die größtmögliche Flexibilität Sie Ihre Klasse entlang der Linien wie schreiben sollte:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class OptraderInfo { 

    private Date date; 
    private Double dividend; 

    public static final String DEFAULT_DATE_FORMAT = "dd/MM/yyyy"; 
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(DEFAULT_DATE_FORMAT); 

    public String getDateFormatted() { 
     return DATE_FORMAT.format(date); 
    } 

    public Date getDate() { 
     return date; 
    } 

    public void setDate(Date date) { 
     this.date = date; 
    } 

    public void setDate(String date) throws ParseException { 
     this.date = DATE_FORMAT.parse(date); 
    } 

    public void setDate(String date, String format) throws ParseException { 
     this.date = new SimpleDateFormat(format).parse(date); 
    } 


    public Double getDividend() { 
     return dividend; 
    } 

    public void setDividend(Double dividend) { 
     this.dividend = dividend; 
    } 
} 

Speichern des aktuellen Datum als Datum in der Info-Klasse ermöglicht es Ihnen, sortieren und andere Arten von Manipulationen nach Bedarf. Es ist nie eine gute Idee, Daten als Zeichenfolgen zu speichern.

+0

vielen Dank Ich werde es versuchen. –

+0

Celias-gute Arbeit. SimpleDateFormat ist tatsächlich nicht threadsicher (siehe javadoc), so dass Sie bei jeder Analyse entweder eine Synchronisierung durchführen oder eine neue erstellen müssen. –

+0

Oleg, du hast Recht. Die Static für die Erstellung des SimpleDateFormat sollte nicht da sein. Meine Finger kopierten nur die obige Zeile. Guter Fang. – celias

0

Speichern Sie ein Date-Objekt im Modell. Dann Table Format Renderers machen Sie es einfach, das Datum in einem Format anzuzeigen, das Sie wünschen.

Verwandte Themen