Moin, zur Java Programmierung habe ich eine Frage: Für ein Programm hätte ich gerne eine Art Tabelle von Graphikelementen (Panels oder Fenster). Diese Tabelle soll nicht einzelne einfache Zellen enthalten, sondern sowas, wie zum Beispiel der Reichelt Warenkorb, also verschiedene Einträge mit Bearbeitungsmöglichkeiten. Es soll Text drinstehen, Textfelder, Knöpfe und vielleicht ein Bild. Ich hoffe, es ist einigermaßen verständlich, was ich meine. Mit einer JTable und TableCellRenderer habe ich es schon probiert, aber die Tabelle zeigt nicht das Panel an, sondern nur die Stringrepräsentation des Panels. Ich brauche keine fertige Lösung, sondern nur den Ansatz zum weiterarbeiten. Danke schonmal.
Dussel schrieb: > Mit einer JTable und TableCellRenderer habe ich es schon probiert, aber > die Tabelle zeigt nicht das Panel an, sondern nur die > Stringrepräsentation des Panels. Ich brauche keine fertige Lösung, > sondern nur den Ansatz zum weiterarbeiten. Ja WIE hast du es den probiert? Hier steht wie es grundsätzlich geht: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender Grundsätzlich wird das angezeigt, was du in der getTableCellRendererComponent Methode zurückgibst.
1 | public Component getTableCellRendererComponent( |
2 | JTable table, Object color, |
3 | boolean isSelected, boolean hasFocus, |
4 | int row, int column) |
d.h. nicht wie in den Beispielen "this" sondern halt dein Panel oder so, du solltest dann auch nicht DefaultTableCellRenderer erweitern sondern schlicht das TableCellRenderer interface.
Manchmal ist es doch echt blöd. Jetzt habe ich mich (nach mehr oder weniger) langem Probieren dazu durchgerungen, hier die Frage zu stellen und dann probiere ich es noch einmal und komme auf die Lösung… Als probiert habe ich es mit dem TableCellRenderer auf verschiedene Arten, habe aber immer nur das Panel oder Fenster als String in der Tabelle angezeigt bekommen. Die einfache Lösung: Es lag nicht am Renderer. Der war bei den Versuchen meistens richtig, nur wurde er nicht aufgerufen. Der Renderer wird für eine bestimmte Klasse festgelegt. Allerdings liefert das DefaultTabelModel, das ich benutzt habe, für jede Zelle nur 'Component' als Zellinhalt zurück. Und damit ruft die Tabelle nur den Standardrenderer auf, der bei unbekannten Klassen toString() zurück gibt. Mit einem eigenen Modell, das bei entsprechenden Zellen 'EigenesPanel' zurückliefert, funktioniert es jetzt. Trotzdem dank.
Dussel schrieb: > Mit einem eigenen Modell, das bei entsprechenden Zellen 'EigenesPanel' > zurückliefer das geht aber auch ohne Spezielle Klasse steht auch im tutorial:
1 | TableCellRenderer weirdRenderer = new WeirdRenderer(); |
2 | table = new JTable(...) { |
3 | public TableCellRenderer getCellRenderer(int row, int column) { |
4 | if ((row == 0) && (column == 0)) { |
5 | return weirdRenderer; |
6 | }
|
7 | // else...
|
8 | return super.getCellRenderer(row, column); |
9 | }
|
10 | };
|
Ja gut, als anonyme Klasse. Das Problem war ja nicht der Renderer, sondern rauszufinden, dass es eben nicht am Renderer lag. Danke. Jetzt geht es ja.
Dussel schrieb: > Das Problem war ja nicht der Renderer, sondern rauszufinden, dass es > eben nicht am Renderer lag Deshalb für die Zukunft gut zu wissen, falls du z.B. eine ganz spezielle super duperzelle hast, oder eben nicht ausschließlich am Datentyp den Renderer festmachen kannst....
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.