Programmiertechnik: Methode einer Klasse beim Anlegen überschreibt

hodoe

Mitglied
Moin, ich habe hier mal wahllos aus der JTable-Turorial folgendes ausgewählt.

Zitat: "Am einfachsten geht das indem man die Methode prepareRenderer() der Klasse JTable überschreibt:"

Java:
table = new JTable( model ) {
            public Component prepareRenderer(
                    TableCellRenderer renderer, int row, int column) {
                Component c = super.prepareRenderer(renderer, row, column);
                if (!isRowSelected(row)) {
                    String type = (String)getModel().getValueAt(row, 0);
                    c.setBackground(row % 2 == 0 ? null : Color.LIGHT_GRAY );
                }
                if (isRowSelected(row) && isColumnSelected(column))
                    ((JComponent)c).setBorder(selected);
                return c;
            }
        };

Dazu habe ich mal eine Frage zur Programmiertechnik. Es geht mir überhaupt nicht um den Inhalt der Methodenüberschreibung sondern um die Programmiertechnik oder den "Stil". Direkt hinter
Code:
table = new JTable( model )
folgt ja der Code zum Überschreiben der Methode, beginnend mit
Code:
{
.

Wie kann man sowas denn nachträglich bewerkstelligen.

Angenommen ich lege table so an:
Code:
table = new JTable( model );


Wie kann ich denn dann die Methode überschreiben?


Gruß
Holger
 
Das was in deinem oben gezeigt Code gemacht wird nennt sich Anonyme Klasse.
und funktioniert nur in der dort gezeigten Form. nachträglich überschreiben geht nicht.

Wobei soetwas nur in sehr wenigen Fällen überhaupt verwednet werden sollte.

Warum legst du nicht einfach eine neue Klasse an die JTable ueberschreibt

Java:
public class MyJTable extends JTable{
...ueberschreib die gewuenschten Methoden

und dann kannst du später einfach 

JTable table = new MyTable()

machen.
 
Java ist eine statisch getypte Spache. Der Typ eines Objekts kann sich zur Laufzeit nicht mehr ändern, aber genau das wäre die Konsequenz einer nachträglich geänderten Methode.

Die beiden hier gezeigten Techniken (Kindklasse bzw. deren Spezialfall anonyme Klasse) erzeugen dagegen einen neuen (geänderten) Typ bereits zur Compilierzeit, der Compiler sind also neue Typen mit der gewünschten Änderung bereits bekannt.
 
Moin, danke Euch beiden. Der Groschen ist gefallen.


@AmunRa
>>Warum legst du nicht einfach eine neue Klasse an die JTable ueberschreibt


Tja das fehlte mir doch 🙂


Gruß!
Holger
 

Zurück
Oben