Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich stehe gerade mächtig auf´m Schlauch. Ich möchte eine Klasse haben, die ich dann für eine Spalte in meinem JTable nehmen kann. Diese Klasse soll einfach mein Datum beherbergen, damit ich die Eingabe über FormatedTextField einschränken kann.
Nun ich habe mir gedacht, dass ist doch ganz einfach du erbst einfach von String, nur leider funzt das ja nicht. Kann mir jemand vom Schlauch helfen?!
Man kann von String nicht erben, da die Klasse sinnvollerweise final ist. Du kannst dir aber einfach ne eigene Klasse erstellen und dort die toString() Methode überschreiben.
Diesen Spruch bitte abgewöhnen. Stattdessen lieber IMMER eine genaue Fehlerbeschreibung [+ Fehlermeldung wenn vorhanden] posten . Ist jetzt bei dem Thema nicht so wichtig, dafür aber bei anderen Problemen umso mehr
So wie ich dich verstanden habe willst du ne Container-Klasse für nen Date-Object, welches du außerdem ner JList übergeben kannst damit diese es nach deinen Vorstellungen anzeigt.
Java:
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
public class Ex {
public static void main(String[] args) {
JFrame window = new JFrame();
JPanel panel = new JPanel();
window.add(panel);
JList myList = new JList(new Object[]{new MyDate(new Date()),new MyDate(new Date(1251234252353L))});
panel.add(myList);
window.pack();
window.setVisible(true);
}
}
class MyDate{
private static SimpleDateFormat formatter = new SimpleDateFormat("'Am' dd.MM.yyyy 'um' HH 'Uhr und' ss 'Minuten'");
private Date date;
public MyDate(Date date){
this.date = date;
}
@Override
public String toString(){
return formatter.format(date);
}
}
also ich möchte in meinem JTable nur bei der Spalte Datum die Eingaben einschränken. Nun habe ich ja bei einem JTable das Problem, das wenn ich die FormatedText Klasse auf die String.class anwende, dann schränke ich doch alle Spalten ein, die als Object ein String erwarten.(Oder?!) Nun brauche ich also ein Object, welches einen String liefert, bei dem ich FormatedText anwenden kann, ohne das es auswirkungen auf meine anderen Zellen hat.
Also einfach gesagt ich möchte unterschiedliche Spalten vom Typ String mit unterschiedlichen Eingabemöglichkeiten ausstatten. Da habe ich mir gedacht da bräuchte ich für jede Spalte einen eigenen Datentyp.(Richtig?)
ich möchte in meinem JTable nur bei der Spalte Datum die Eingaben einschränken.
....
Da habe ich mir gedacht da bräuchte ich für jede Spalte einen eigenen Datentyp.(Richtig?)
Zunächst eine Antwort auf die Frage: Nein, denn das Datum wird ja letztendlich wieder als Stringrepräsentation dargestellt.
Und jetzt meine Frage: Wie möchtest Du die Eingabemöglichkeit einschränken?
Entweder man lässt den Anwender eine Eingabe machen, überprüft ob diese den zulässigen Kriterien entspricht - wenn nicht, wird der Eintrag zurückgesetzt.
Oder man verwendet für die Spalte einen TableCellEditor, der nur korrekte Eingaben zulässt.
Hier gibt's auch irgendwo ein Tutorial zum JTable, finde es aber gerade nicht.
also ich habe mir das How to use a Table /Using an Editor to Validate User-Entered Text durchgelsen.
Wenn ich das richtig verstanden habe, dann bewirkt
Code:
mytable.setDefaultEditor(Integer.class, new IntegerEditor(0, 100));
dass alle Spalten die Integer annehmen auf 0-100 limitiert sind.
So nun möchte ich aber nicht alle Spalten vom Typ String so limitieren das nur Eingaben ala 2009-01-01 möglich sind sondern nur meine Datums Spalte. Folglich dachte ich, ich müsste mir eine schreibe, die von meinem TableModel akzeptiert wird und der ich dann in meinem Table einen eigenen Editor anhängen kann.
Es mag zwar sinnvoll sein das String "final" ist, was jedoch nicht so sinnvoll ist, Methoden zu deklarieren, die unbedingt einen String als Parameter haben wollen. String implementiert CharSequence. Und deswegen kann man die Problematik oben etwa so beheben:
Java:
class StringBox implements CharSequence
{
private final CharSequence sequence;
public StringBox(CharSequence sequence)
{
this.sequence = sequence;
}
// Methoden von CharSequence überschreiben
// und auf "sequence" delegieren
// unter anderem:
public String toString()
{
return sequence.toString();
}
}
StringBox kann nun jede erdenkliche Art von Zeichenkette inklusive String sein. Und wenn nun die Methoden CharSequence statt String erwarten, ist alles bestens.