Vererbung Übergabe von Variablen der Superklasse an Subklasse mit "extends"

Abend die Leute :)

Nachdem ich seit gestern nicht kapiere, was ich mit der Vererbung falsch mache, dachte ich mir, ich poste einfach mal mein Problem hier ...

Ich möchte in der Klasse hbS_ActionListener mit den Objekten (bzw. das JLabel display), die ich in der Klasse hbS erstellt habe, arbeiten können, also "display.setText()" verwenden können.

Und dafür muss ich ja, hbS zur Superklasse machen, und das funktioniert mit dem Schlüsselworte "extends" oder nicht ?

Naja, erstmal die beiden Klassen:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class hbS extends JFrame
{ 
  private JLabel[] l = new JLabel[2];
  private JList roomList = new JList();
  private JList smokeList = new JList();
  private JList priceList = new JList();
  private JButton start = new JButton();
  public JLabel display = new JLabel();
  
  public static void main(String[] args)
  {
    hbS frame = new hbS("Hotelbuchungssystem");
    frame.setVisible(true);
  }
  
  public hbS(String title)
  {
    //Erstellen des Fensters
    super(title);
    setBounds(100,100,400,500);
    setLayout(null);
     
    [...]

    //Erstellen des Button zum Starten der Suche nach verfügbaren Zimmern
    start = new JButton("Suchen");
    start.setBounds(20,150,90,30);
    add(start);
    start.setActionCommand("start");
    //actionPerformed() ausgelagert in Objekt hbS_ActionListener() zur Übersichtlichkeit
    start.addActionListener(new hbS_ActionListener());
    
    //Estellen des Textfeldes, in dem die Suchergebnisse gelistet werden
    display = new JLabel();
    display.setBounds(20,170,300,300);
    display.setText("<html><body>Textzeile1<br>Textzeile2</body></html>");
    add(display);  
  }
}

Java:
import java.awt.event.*;
import java.io.*;

public class hbS_ActionListener extends hbS implements ActionListener
{ 
  public void actionPerformed(ActionEvent eve)
  {
    if (eve.getActionCommand().equals("start")) 
    {
      try 
      { 
        //Erstellen eines Objekts vom Typ hbS_getFileData um Methoden auslagern zu können und Code übersichtlicher zu machen
        hbS_getFileData obj = new hbS_getFileData();
        //Übergeben der Daten in der Textdatei
        String[] data = obj.readFile("hotbooksys.txt");
        
        [...]

        //Suche, welche Räume überhaupt frei sind
        int[] emptyRooms = obj2.getEmptyRooms(dataList);
        obj2.displayEmptyRooms(emptyRooms);
        
       //display.setText(" "); <--- das möchte ich machen können !

      }  
      catch(IOException err) 
      {
        System.out.print("***FEHLER BEIM EINLESEN DER DATEI***");
      }
      
    } // end of if
  }
}

Bekomme diese Fehlermeldung, welche ich auch verstehe, da sie sich auf die Methode hbS(String title) bezieht. Aber ich möchte doch die ganze Klasse vererben, was will er mit der Methode?

Java:
hbS_ActionListener.java:4:8: error: constructor hbS in class hbS cannot be applied to given types;
public class hbS_ActionListener extends hbS implements ActionListener
       ^
  required: String
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error

Habe gelesen, ich muss irgendwas mit super() machen. Aber was ? Hab schon so einiges ausprobiert, und hatte schon einige Beispiele mir angeschaut, aber übertragen auf meinen Code, funktionierte es nicht.

Wäre über eine kurze Hilfe sehr dankbar ! :)
 
Zuletzt bearbeitet:

DarXun

Aktives Mitglied
Guten Abend,

der Fehler der bei dir auftritt ist dadurch zu erklären, dass du in hbS ja den hbS_ActionListener mit

new hbS_ActionListener() erzeugst. Durch das extends übernimmst du auch die Konstruktoren der Oberklasse. Dieser erwartet einen String. Einen Parameterlosen Konstruktor hat der ActionListener damit nicht mehr, folglich kann das schon nichts mehr werden.

Aber generell ist deine Vorgehensweise nicht zu empfehlen. Der ActionListener ist ja kein hbS, also kein Fenster, sondern nur ein Listener. Die Vererbung macht aus fachlicher Sicht keinen Sinn. Programmier mal eine get-Methode für das Label, danach schaust du dir mal das Singleton-Entwurfsmuster an.
 
Ja stimmt, der ActionListener hat ja eigentlich nichts mit dem Fenster hbS zu tun ...

Aber die eigene Klasse für den Listener an sich macht schon Sinn, oder ? Also dass alles schön voneinander getrennt ist...

Hab jetzt getText() so gemacht :

Java:
import java.awt.event.*;
import java.io.*;

public class hbS_ActionListener implements ActionListener
{ 
  String text;
  
  public void actionPerformed(ActionEvent eve)
  {
    if (eve.getActionCommand().equals("start")) 
    {
      try 
      { 
        [...]
        i = 0;
        text = "" + emptyRooms[i];
        text = getString(emptyRooms, text, i);
        
        System.out.println(text);
        
      }  
      catch(IOException err) 
      {
        System.out.println("***FEHLER BEIM EINLESEN DER DATEI***");
      }
      
    } // end of if
  }
  public String getString(int[] emptyRooms, String text, int i)
  {
    i++;
    if (i<emptyRooms.length) 
    {
      text = text + " " + emptyRooms[i];
      text = getString(emptyRooms, text, i);
    } // end of if
    
    return text;
    
  }
  
  public String getText()
  {
    return text;  
  }
}

und in hbS eben ein Objekt der ActionListener-Klasse erstellt, damit das Label display drauf zugreifen kann

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class hbS extends JFrame
{
  [...]
  public static void main(String[] args)
  {
    hbS frame = new hbS("Hotelbuchungssystem");
    frame.setVisible(true);
  }
  
  public hbS(String title)
  {
    [...]
    //Erstellen des Textfeldes, in dem die Suchergebnisse gelistet werden
    display = new JLabel();
    display.setBounds(20,170,300,300);
    display.setText("<html><body>Textzeile1<br>Textzeile2</body></html>");
    hbS_ActionListener obj = new hbS_ActionListener();
    display.setText(obj.getText());
    add(display);
    
  }
}

aber hab schon von vornherein gemerkt, dass da was nicht funktionieren wird.

Die display.setText(obj.getText()) - Zeile wird ja nur einmal aufgerufen, und zwar während das Fenster gezeichnet wird. Ergo, steht nichts in display. Wenn ich auf den Start-Knopf drücke, wird die Zeile ja nicht aufgerufen ... also wäre ich wieder am Anfang, dass ich den ActionListener dazu bringen muss, display verändern zu können ...

oder hat genau dieses Problem jetzt was mit dem Singleton-Entwurfsmuster zu tun, und deshalb soll ich es mir anschauen ?

Frage nur, dass ich dann weiß, dass mein Ansatz bis jetzt richtig ist (und von dir so gedacht war) :) Dann würde ich mich in das Entwurfsmuster einlesen.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Inwieweit dich das Singleton-Pattern hier weiter bringen soll, entzieht sich meiner Kenntnis.
Aber um den ActionListener Zugriff auf das JLabel zugeben, kannst du es z. B. einfach im Konstruktor übergeben:
Java:
public class TextChanger implements ActionListener{
    private JLabel display;
    TextChanger(JLabel display){
        this.display = display;
    }
    public void actionPerformed(ActionEvent eve){
        //blabla
        display.setText(getString(emptyRooms, text, i));
    }
}
public class HotelBookingSystem extends JFrame
{
  [...]
  public static void main(String[] args)
  {
    HotelBookingSystem frame = new HotelBookingSystem("Hotelbuchungssystem");
    frame.setVisible(true);
  }
 
  public HotelBookingSystem(String title)
  {
    [...]
    //Erstellen des Textfeldes, in dem die Suchergebnisse gelistet werden
    display = new JLabel();
    hbS_ActionListener obj = new hbS_ActionListener(display);
    add(display);
   
  }
}
Klassennamen beginnen in Java mit einem Grossbuchstaben und sollten sprechend sein!
 
Zuletzt bearbeitet:

DarXun

Aktives Mitglied
Das Singleton-Pattern kann hier genutzt werden um an das Feld zu kommen. Ich habe das hier empfohlen, da es leicht umzusetzen ist. Das übergeben per Konstruktor ist natürlich noch einfacher, darauf bin ich nur irgendwie nicht gekommen :D

Die "non-plus-ultra"-Version wäre aus meiner Sicht das MVC-Pattern...

EDIT: Bei der Größe des Programmes aber aktuell natürlich totaler "overkill"
 
Zuletzt bearbeitet:
So, vielen Dank an euch beide :) Klappt jetzt so wie ich es will :)

Hab mein Problem jetzt so gelöst, sodass ich sozusagen zwei essentielle Funktionen des Programms in einer Zeile stehen habe - den Suchen-Knopf, sowie JLabel display dem Listener hinzuzufügen (zuzu ? :D)

Java:
//Erstellen des Textfeldes, in dem die Suchergebnisse gelistet werden
    display = new JLabel();    
    display.setBounds(20,170,300,300);
    display.setText("<html><body>Textzeile1<br>Textzeile2</body></html>");
    start.addActionListener(new HBS_ActionListener(display));
    add(display)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Problem bei Übergabe von Variablen Java Basics - Anfänger-Themen 1
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
A Übergabe von Variablen zu Paintmethode Java Basics - Anfänger-Themen 2
O Übergabe von Variablen Java Basics - Anfänger-Themen 9
K Übergabe einer im EventListener definierte variablen Java Basics - Anfänger-Themen 2
M Übergabe von Variablen in eine Klasse Java Basics - Anfänger-Themen 13
G Übergabe Variablen von Servlet zu JSP? Java Basics - Anfänger-Themen 4
D Übergabe von Variablen Java Basics - Anfänger-Themen 11
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
L Methoden Übergabe von Parameter Java Basics - Anfänger-Themen 3
K Java Problem mit Übergabe von argumenten Java Basics - Anfänger-Themen 3
J Übergabe von Parametern an andere Methoden Java Basics - Anfänger-Themen 5
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
R Methoden Übergabe von einer Methodenvariable Java Basics - Anfänger-Themen 3
M Übergabe von Werten Java Basics - Anfänger-Themen 10
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
C Erste Schritte Übergabe von Klassen Java Basics - Anfänger-Themen 2
C Methoden Objekte und Methode und Übergabe Java Basics - Anfänger-Themen 4
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
M Übergabe / Rückgabe Java Basics - Anfänger-Themen 6
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
fLooojava Probleme bei der Übergabe einer Variable Java Basics - Anfänger-Themen 14
S OOP Übergabe eines Objektes? Java Basics - Anfänger-Themen 1
fLooojava OOP Übergabe/Output in Textfield Java Basics - Anfänger-Themen 4
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
J ArrayList toString() Übergabe Fehler Java Basics - Anfänger-Themen 2
S Übergabe Java Basics - Anfänger-Themen 14
S Klassen Array: Übergabe von Klasse zur Main Java Basics - Anfänger-Themen 8
A NullPointerException bei Übergabe eines Array Java Basics - Anfänger-Themen 8
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
D Klassen Problem - Übergabe an Konstruktor von Superklasse Java Basics - Anfänger-Themen 2
D Objekt Übergabe Java Basics - Anfänger-Themen 12
M Array Übergabe Java Basics - Anfänger-Themen 17
W Übergabe Stringzeilen von serieller Schnittstelle in andere Klasse Java Basics - Anfänger-Themen 3
B Übergabe Dateiname (String) an andere Klasse Java Basics - Anfänger-Themen 4
P Methoden Übergabe von Werten Java Basics - Anfänger-Themen 7
M Fragen zu Methoden (void/return), Übergabe von Parametern Java Basics - Anfänger-Themen 3
N Array Übergabe Java Basics - Anfänger-Themen 9
L Klassen Parameter Übergabe Java Basics - Anfänger-Themen 12
A OOP Übergabe eines Wertes an den enum Konstruktor Java Basics - Anfänger-Themen 12
Darth Simple Übergabe eines Strings an eine Methode Java Basics - Anfänger-Themen 3
A Frage zur Übergabe von Strings Java Basics - Anfänger-Themen 9
N Übergabe problem Java Basics - Anfänger-Themen 6
M Übergabe von VM Argumenten Java Basics - Anfänger-Themen 4
J Übergabe einer ArrayList an mehrere Threads Java Basics - Anfänger-Themen 3
E Übergabe von werten aus einem JDialog Java Basics - Anfänger-Themen 4
J Übergabe eines Arrays als Parameter Java Basics - Anfänger-Themen 2
S Übergabe von Frame-Objekt - kritisch? Java Basics - Anfänger-Themen 7
L JTabbedPane, richtige Übergabe von Tabs Java Basics - Anfänger-Themen 18
Z BigInteger Methoden und deren Übergabe Java Basics - Anfänger-Themen 3
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
M Problem bei der Übergabe von Werten Java Basics - Anfänger-Themen 7
G Übergabe von Parametern an JSP Java Basics - Anfänger-Themen 3
S Veränderung von Protected Daten durch Übergabe? Java Basics - Anfänger-Themen 3
K Übergabe der Variable für Farbe Java Basics - Anfänger-Themen 6
G List<.> nach Übergabe vergleichen? Java Basics - Anfänger-Themen 3
R Beiß mir die Zähne aus an der Request-Parameter-Übergabe! Java Basics - Anfänger-Themen 10
lin Übergabe an JPanel-Klasse Java Basics - Anfänger-Themen 3
S NullPointerException bei Array-Übergabe Java Basics - Anfänger-Themen 3
W Variabeln Übergabe Java Basics - Anfänger-Themen 14
F Großes Problem: Vector-Übergabe Java Basics - Anfänger-Themen 7
F Übergabe Vaterframe mit this und Fehlermeldung. Java Basics - Anfänger-Themen 2
D Fragen zu Methoden und Übergabe von Werten Java Basics - Anfänger-Themen 4
G Übergabe von Variablenwerten zwischen Methoden Java Basics - Anfänger-Themen 4
D Problem bei Übergabe von Werten an eine Methode Java Basics - Anfänger-Themen 2
H Übergabe eines Wertes an eine Bean --> Bean leer Java Basics - Anfänger-Themen 6
T Array-Übergabe Java Basics - Anfänger-Themen 7
M Windows Pfad-Übergabe.. Java Basics - Anfänger-Themen 6
S String mit Konstruktor (per Übergabe) initialisieren Java Basics - Anfänger-Themen 10
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
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
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben