von Unterunterklasse auf Haputklasse zugreifen

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich hab mal wieder ein Problem:
Ich würde gern von einer Unterunterklasse auf die Hauptklasse zugreifen; in meinem Fall wollte ich einfach einem Label einen anderen Text geben.

Ich bekomme bei dieser Aktion nur immer einen NullPointer - die gute Nachricht ist, dass ich weiß warum er verursacht wird (Es gibt Probleme bei der Wertübergabe. Habe ich bei der Unterklasse über den Konstruktor geregelt. Das geht nur irgendwie nicht bei der Unterunterklasse... kann es nicht richtig erklären.;)); die Schlechte, dass ich nicht weiß wie ich ihn beheben kann.

Ich würde es gerne vermeiden von der Hauptklasse auf die Unterunterklasse direkt zuzugreifen. Des weitern wollte ich nicht erst auf die Unterklasse und von dieser dann auf die Hauptklasse zugreifen.

Ich hoffe, mein Problem kam verständlich rüber: hier mal ein Minimalbeispiel:
Code:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Hauptklasse extends JFrame {
    
    public JLabel label = null;
    private JButton button = null;
    
    private Unterklasse unterklasse = null;
    
    public static void main(final String[] args) {
        new Hauptklasse();
    }
    
    public Hauptklasse() {
        super("LabelÄndern");
        this.setPreferredSize(new Dimension(300, 80));
        this.setLocation(100, 100);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new FlowLayout());
        
        unterklasse = new Unterklasse(this);
        
        label = new JLabel();
        label.setText("Hallo Welt");
        getContentPane().add(label);
        
        button = new JButton("Ändere Label");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                unterklasse.actionButton();
            }
        });
        getContentPane().add(button);
        
        this.pack();
        this.setVisible(true);
    }

}
Code:
public class Unterklasse {
    
    private Hauptklasse hauptklasse = null;
    private Unterunterklasse unterunterklasse = null;
    
    public Unterklasse(Hauptklasse hauptklasse) {
        unterunterklasse = new Unterunterklasse();
        this.hauptklasse = hauptklasse;
    }
    
    public void actionButton() {
        unterunterklasse.changeLabel();
    }

}
Code:
public class Unterunterklasse {
    
    private Hauptklasse hauptklasse;
    
    public void changeLabel() {
        hauptklasse.label.setText("Hallo geänderte Welt");
    }

}
 

diggaa1984

Top Contributor
im zweifelsfall musst du der Unterunterklasse ja noch die Hauptklasse bekannt machen, die stehen ja alle in keiner Beziehung zueinander.

Hauptklassen, Unterklasse, Unterunterklasse .. bist du sicher das du nicht nach etwas wie Vererbung suchst und protected deklarierten Variablen!?
 

Antoras

Top Contributor
Wenn ich die Hauptklasse der Unterunterklasse über deren Konstruktor bekannt mache, dann bekomme ich Probleme mit meiner Unterklasse.

Ob ich dafür lieber auf Vererbung zurückgreifen sollte weiß ich nicht so richtig. Sinn des ganzen soll halt sein, dass ich ein in der Hauptklasse ein GUI hab, in der Unterklasse meine Logik und in den Unterunterklassen Teile der Logik, auf die die Unterklasse zurückgreifen kann (zur besseren Übersicht).
 

diggaa1984

Top Contributor
naja aber da hast doch schon die hierarchie gegeben:

Hauptklasse wird ein wenig durch Unterklasse beeinflusst (Logik führt zu Änderungen in der Anzeige der Hauptklasse). Da die Unterunterklasse nun Teillogiken auslagert, würde ich hier gar kein Zugriff auf die Hauptklasse vornehmen, sondern dabei über die Unterklasse gehen (Eventuell müsstest du mal ein Beispiel geben was in etwa in er Unterklasse passiert und was in der Unterunterklasse).

Somit hast ne Kopplung:
Hauptklasse - Unterklasse und
Unterklasse - Unterunterklasse

Und Vererbung wäre hier in der Tat verkehrt, das stimmt.

Du könntest auch das JLable aus der Unterklasse heraus an die Unterunterklasse als Parameter übergeben, aber auch das finde ich nicht wirklich schön gelöst, da du ja dann wieder indirekte Kopplung zur GUI hast

Denkbar wäre es ja durch die Unterunterklasse an Daten heranzukommen und in der Unterklasse diese nur noch auf der GUI zu verteilen oder dergleichen.
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Ich glaube, es ist am besten einfach von der Unterunterklasse aus auf die Unterklasse und von dort aus auf die Oberklasse aus zuzugreifen. Ich erstelle dafür einfach eine neue Methode, die dann die Label-Beschriftung ändert:
Code:
public class Unterklasse {
    
    private Hauptklasse hauptklasse = null;
    private Unterunterklasse unterunterklasse = null;
    
    public Unterklasse(Hauptklasse hauptklasse) {
        unterunterklasse = new Unterunterklasse(this);
        this.hauptklasse = hauptklasse;
    }
    
    public void actionButton() {
        unterunterklasse.doSomething();
    }
    
    public void changeLabel() {
        hauptklasse.label.setText("Label geändert");
    }

}
Code:
public class Unterunterklasse {
    
    private Unterklasse unterklasse;
    
    public Unterunterklasse(Unterklasse unterklasse) {
        this.unterklasse = unterklasse;
    }
    
    public void doSomething() {
        unterklasse.changeLabel();
    }

}
Die Hauptklasse ist gleich geblieben.

Sinn des ganzen war ein Adressbuch, dessen Hauptklasse das GUI beinhaltet. Mit der Unterklasse hole ich die auf dem GUI eingegebene Daten und leite sie an die Unterunterklasse weiter, die wiederum die Daten in eine Datei speichert. Das gleiche trifft auch auf das Laden der Daten zu: Eine weitere Unterunterklasse lädt die Daten aus der Datei, gibt die an die Unterklasse weiter, welche sie dann auf dem GUI ausgibt.
Mit dem Label wollte ich dem Anwender Rückmeldung geben ob irgendwas und was passiert ist.
Das wollte ich aber erst dann machen wenn die Daten wirklich gespeichert wurden - deshalb der Aufruf über die Unterunterklasse.

So wie es jetzt ist ist es wohl am besten. Die Unterklasse verwaltet alle Daten und die Unterunterklassen machen damit irgendwas.
 

diggaa1984

Top Contributor
du kannst doch mit Rückgabewerten oder Exception-Weiterleitung in der Unterunterklasse arbeiten und je nachdem was Eintritt hat die jeweilige Verarbeitung geklappt oder nicht .. ich würde diese Analyse der Entscheidung nicht in der Unterunterklasse lassen. Sie arbeitet nur mit irgendlwelchen Daten und kann Aufschluss darüber geben ob das erfolgreich war oder nicht. Was bei jeweiliger Situation passiert, ob was in der GUI angezeigt wird oder nicht ist in der Unterklasse besser aufgehoben. Und auch besser für dich wartbar, wenn das Programm komplexer wird.
 

Antoras

Top Contributor
Stimmt, so könnte ich es machen. Was wäre da die beste Vorgehensweise? Einfach in der Unterunterklasse ein Attribut mit einem bestimmten Wert zurückgeben und in der Unterklasse dann dieses Attribut mit ner Mehrfachverzweigung überprüfen? Oder gibt es da einen bestimmten Befehl, mit dem man den Rückgabewert einer Methode direkt auslesen kann?
 

diggaa1984

Top Contributor
hm wie du es machst is dir überlassen, den rückgabewert der methode bekommst ja beim aufruf der methode zurück also ...

Code:
[COLOR="DarkRed"][B]public void[/B][/COLOR] foo() {
    //impliziert boolean als Rückgabewert
    [COLOR="#8b0000"][B]if[/B][/COLOR] ([COLOR="RoyalBlue"]unterunterklasse[/COLOR].bar()) {
        <hat geklappt>
    } [COLOR="#8b0000"][B]else[/B][/COLOR] {
        <hat nich geklappt>
    }
}

//in unterunterklasse dann
[COLOR="#8b0000"][B]public boolean[/B][/COLOR] bar() {
     <bearbeitung der daten und [COLOR="DarkRed"]return true[/COLOR] oder [COLOR="#8b0000"]return false[/COLOR] nutzen>
}
-------------------------

[COLOR="#8b0000"][B]public void[/B][/COLOR] fooo() {
    [COLOR="#8b0000"][B]try[/B][/COLOR] {
        [COLOR="#4169e1"]unterunterklasse[/COLOR].barr();
    } [COLOR="#8b0000"][B]catch[/B][/COLOR] (Exception e) { //eventuell speziellere Exception angeben
        <Fehler bei Bearbeitung>
    }
}

//in unterunterklasse dann
[COLOR="#8b0000"][B]public void[/B][/COLOR] barr() [COLOR="#8b0000"][B]throws[/B][/COLOR] Exception {
    <bearbeitung von daten und weiterleitung einer exception oder werfen einer neuen>
}

kannst selbstverständlich alles mögliche als Rückgabewert verwenden :D
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Ich hab statt if-else lieber switch-case genommen, da ich mehr als zwei Rückgabewerte habe. Aber das ist ja nebensächlich...

Hast mir auf jeden Fall sehr geholfen. Danke dir :D

Ach ja: Wie hast den Code-Block farbig bekommen?
 

Antoras

Top Contributor
pöh, da bin ich dann ja ne halbe Stunde beschäftigt bis ich mal einen Beitrag posten kann. :eek:
Vielleicht ist aber ja jemand hier, der JavaScript beherrscht. Der könnte ja ein Addon für Firefox schreiben, das auf Knopfdruck die Codes einfärbt. Würde es selber machen, aber von JS hab ich keine Ahnung...

Aber vielleicht haben wir ja Glück und das Forum hier erfährt bald ein Update. Schwarz-weiß-Beiträge sehen so trostlos aus.:(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
O Mit Instanz von Oberklasse auf Unterklasse zugreifen Java Basics - Anfänger-Themen 2
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
X Auf Attribut einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 2
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
X Methode kann auf ArrayListe nicht zugreifen! Java Basics - Anfänger-Themen 10
F Auf Array einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 4
R Auf eine Stelle [i] des Arrays zugreifen Java Basics - Anfänger-Themen 7
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
K Vererbung Auf Methoden von Unterklassen zugreifen Java Basics - Anfänger-Themen 6
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
J Hinzufügen eines Objekts in eine Liste, um später dann nochmal auf das Objekt zugreifen zu können Java Basics - Anfänger-Themen 8
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
D Auf ArrayList mit get zugreifen Java Basics - Anfänger-Themen 8
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
C Methoden Auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 10
P Auf JLabel zugreifen Java Basics - Anfänger-Themen 12
S Auf Array einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 13
das_leon Auf Ordner zugreifen (Vollzugriff) Java Basics - Anfänger-Themen 2
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
F Aus einer anderen Klasse auf ein JTextField zugreifen Java Basics - Anfänger-Themen 17
T Methoden Auf Variabler aus anderer Methode zugreifen Java Basics - Anfänger-Themen 5
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
L Auf Methoden einer Subklasse zugreifen ohne Typecast ? Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Klassen Von einer Klasse auf eine erbende Klasse zugreifen Java Basics - Anfänger-Themen 13
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
F [OOP] Auf eine Variable aus meherer Klassen zugreifen Java Basics - Anfänger-Themen 22
C OOP Von mehreren Klassen aus auf das selbe Objekt zugreifen Java Basics - Anfänger-Themen 8
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
J Best Practice Auf DefaultTableModel in andere Klasse zugreifen Java Basics - Anfänger-Themen 4
T Auf Instanz einer Liste zugreifen Java Basics - Anfänger-Themen 2
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
S Methoden Auf Methode der Unterklasse zugreifen? Java Basics - Anfänger-Themen 2
K OOP Mit anderer Klasse auf JTextField zugreifen Java Basics - Anfänger-Themen 5
D Von einem Objekt auf Properties zugreifen Java Basics - Anfänger-Themen 3
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
H Methoden Auf Methode zugreifen Java Basics - Anfänger-Themen 14
E Methoden Auf Methoden einer Klasse zugreifen, ohne ein Objekt zu erstellen Java Basics - Anfänger-Themen 2
N Auf TextFeld aus anderer Klasse zugreifen ohne es zu übergeben Java Basics - Anfänger-Themen 3
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
P auf superklasse zugreifen Java Basics - Anfänger-Themen 24
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
P aus ActionListener auf HauptFrame zugreifen Java Basics - Anfänger-Themen 4
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
D Methoden Wie können Klassen auf Klassenfremde Objekte zugreifen? Java Basics - Anfänger-Themen 7
H Klassen Auf eine Hashtable aus mehreren Klassen zugreifen Java Basics - Anfänger-Themen 12
D Auf equals von Vaterklasse zugreifen Java Basics - Anfänger-Themen 4
S Methode auf Main zugreifen Java Basics - Anfänger-Themen 5
C Aus mehrern Methoden auf selbes Array zugreifen Java Basics - Anfänger-Themen 4
K Nachträglich auf Objekte zugreifen Java Basics - Anfänger-Themen 2
B Klassen Auf Instanz anderer Klasse zugreifen Java Basics - Anfänger-Themen 1
S auf Array zugreifen Java Basics - Anfänger-Themen 2
D Best Practice Mit Java auf fremdartige Formate zugreifen. Java Basics - Anfänger-Themen 3
D Bei Objekt der Oberklasse auf Unterklassenmethode zugreifen? Java Basics - Anfänger-Themen 4
S Klassen Auf Objekt in Klasse A in Klasse B zugreifen Java Basics - Anfänger-Themen 4
C Klasse auf mehrere Objekte zugreifen lassen Java Basics - Anfänger-Themen 26
I Auf Methode zugreifen ( Objekt.Methode; ) Java Basics - Anfänger-Themen 1
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
G Auf Objekt der selben Klasse zugreifen Java Basics - Anfänger-Themen 2
D in Mainmethode auf Werte aus Klassenmethode zugreifen Java Basics - Anfänger-Themen 9
J In main erzeugtes objekt zugreifen. Java Basics - Anfänger-Themen 12
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W Klassen Auf andere Klassenobjekte zugreifen Java Basics - Anfänger-Themen 20
A Ohne Cast auf Methode zugreifen? Java Basics - Anfänger-Themen 4
Ananaskirsche Methoden Auf Methode in anderem Package zugreifen Java Basics - Anfänger-Themen 3
T Warum kann ich auf Variable nicht zugreifen Java Basics - Anfänger-Themen 6
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
M Auf die Variable einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 9
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
E Methoden auf von Methoden erstellte Objekte zugreifen (verkettete Liste) Java Basics - Anfänger-Themen 10
T Auf jedes Zeichen eines Strings zugreifen? Java Basics - Anfänger-Themen 2
B Auf die x. Stelle eines Array zugreifen Java Basics - Anfänger-Themen 2
A Vererbung Wie auf Variablen der Superklasse zugreifen? Java Basics - Anfänger-Themen 10
I Auf Objekte zugreifen Java Basics - Anfänger-Themen 4
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben