Forum: PC-Programmierung Java: Panels in Tabelle


von Dussel (Gast)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Dussel (Gast)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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
};

von Dussel (Gast)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.