Tablemodel zu mehreren Tabellen

Foermchen82

Top Contributor
Hallo zusammen,

ich habe ein Tablemodel welches in verschiedenen Tabellen angezeigt wird. Jede Tabelle stellt eine bestimmte Sicht auf die gleichen Daten dar, daher das gleiche Model.

Jetzt habe ich aber einen Fall, dass eine Spalte in einer Tabelle einen anderen Wert anzeigen muss als in allen anderen Tabellen.

Gibt es eine Möglichkeit wie ich quasi im Frame, in dem ich die Tabelle anlege, sagen kann: "bei getValueAt tue in der Spalte dass, sonst die Standard-Funktionalität"?

Danke im voraus!
 
Zuletzt bearbeitet von einem Moderator:
die getValueAt()-Methode ist doch deine, du kannst exakt bestimmen was zurückgegeben wird,
abhängig von der Spalte ist noch die leichteste Aufgabe, der Parameter wird ja direkt übergeben,

falls 'abhängig von der aktuellen Tabelle' deine Frage ist, dann wirds etwas schwieriger,
da ist zunächst die Frage, ob du exakt nur ein Model-Objekt für mehrere Tabellen verwendest, oder mehrere Objekte derselben Klasse,
im letzteren Fall könntest du im Model irgendeine Information zur Tabelle ablegen (Konstruktor-Parameter) und danach unterscheiden,

für ersteren Fall sehe ich nichts schönes, den meinst du hoffentlich nicht?
am ehesten noch eine neue Methode getValueAt(x,y, Info zur Tabelle) einführen und zwischen diesem einen Daten-Modell und den Tabellen einen kleinen Wrapper einführen, unterschiedlich pro Tabelle, der die neue Methode richtig aufruft

edit: in den Tabellen bestimmte Spalten ausblenden klingt besser
 
Zuletzt bearbeitet von einem Moderator:
Jetzt habe ich aber einen Fall, dass eine Spalte in einer Tabelle einen anderen Wert anzeigen muss als in allen anderen Tabellen.
Dann haben die Tabellen ja doch kein gemeinsames Model ;-) Geht es nur um die Anzeige, oder steckt da tatsächlich ein anderer Wert im Model.
==> ein gemeinsames Model definieren
Möglichkeit1: nur die notwendigen Spalten JTable spezifisch einblenden
Möglichkeit2: die Models der JTable erben von dem gemeinsamen Model und überschreiben z.B. die get und setValue Methoden
 
Zum verständnis:

Ich habe nur eine Model-Instanz. Daher meine Frage ob man ein anders Methodenverhalten ein einer bestimmten Stelle quasi "injekten" kann.
 
Der Inhalt der Spalte ist eine Differenzbetrachtung zwischen zwei werten. Also eine rein virtuelle Spalte. Aber wahrscheinlich ist es wirklich das beste, ich füge eine zweite Spalte ein, die ich je nach View einblende
 
Klingt als könnte man da Model delegation machen: Das verwendete Modell reicht alle Methoden an das "echte" Modell weiter, und nur die Zusätzliche Spalte wird "hingefakt"
Code:
class DelegatingModel imlements TableModel
{
    private TableModel realModel;

    public int getNumColumns() { return realModel.getNumColumns() + 1; }
    public Object getValueAt(int r, int c) 
    {
        if (c < realModel.getNumColumns()) return realModel.getValueAt(r,c);
        else return someValueForThisCell();
    }

 ....
}

Hatte irgendwann auch mal ein paar http://www.java-forum.org/codeschnipsel-u-projekte/70650-tablemodelutils.html gebastelt, die ich um solche Dinge erweitern wollte, aber ... man kommt ja zu nix...
 
Möglicherweise würde sich hier ja ein Decorator für das Model anbieten? Den könntest du in der View mit der "besonderen" Tabelle verwenden und müsstest dann nicht jede andere View extra an die darzustellenden Spalten anpassen.

Edit: Mist, wenn man sich mal zwei Minuten Zeit nimmt um darüber nachzudenken was man schreibt, dann ist gleich jemand anderes schneller... 🙄
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben