Swing Wie sollte man seine JComponents vererben?

PaddyFH

Mitglied
Ich wollte ein Program schreiben, in dem eine Klasse ein Interface erstellt mit z.B. zwei JButtons. Dafür müsst ich ja die Buttons in die Subclasses vererben. Dies hatte ich schon folgendermaßen versucht, aber ich finde es ist nicht wahnsinnig elegan und funktionieren tut es irgendwie auch nicht:mad::
Java:
import javax.swing.*;

public class MainMenu {
  
   protected static JFrame frame = new JFrame();
   protected static JPanel mainPanel = new JPanel();
   protected static JButton button1 = new JButton();
   protected static JButton button2 = new JButton();

   public static void main(String[] args) {
        mainPanel.add(button1);
        mainPanel.add(button2);
      
        frame.add(mainPanel);
        frame.pack();
        frame.setVisible(true);
   }

}
Und die subclass:
Java:
public class Button1 extends MainMenu {

   public Button1() {
       button1.addActionListener(e -> {
           System.out.println("button1 is working");
       });
   }

}
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,
ich finde es ist nicht wahnsinnig elegant und funktionieren tut es irgendwie auch nicht
Es ist auch grundlegend falsch, was Du da versuchst!!

(a) Du kannst nicht von der Hauptklasse erben! Vererben solltest Du nur, wenn Du die Oberklasse erweitern willst, was aber hier nun gar keinen Sinn macht!
(b) eine Klasse 'Button' existiert schon!! (https://docs.oracle.com/javase/7/docs/api/java/awt/Button.html)
(c) was soll 'tButton' sein?? Ein Konstruktor müsste immer so wie die Klasse heißen!
(d) aus welchem Grund sollten die ActionListener nicht in der Hauptklasse liegen?
(e) Dein 'mailPanel' weißt doch nichts von der Unterklasse (woher auch). Die deklarierten Button sind vom Typ 'JButton' !!

EDIT: vielleicht noch dies: https://docs.oracle.com/javase/tutorial/uiswing/components/button.html

VG Klaus
 

PaddyFH

Mitglied
Okay, danke für die Antwort! Zu
  • (a) + (d) Mit einem Beispiel wie ich es hab ist es natürlich recht unpraktisch für jedeJButton eine neue Klasse zu erstellen. ABer im eigentlichem Programm will ich deutlich mehr in die Lambda Function packen.
  • (b) + (c) hab ich gefixt war nur ein Tipfehler
  • (e) Hier verstehe ich es nicht: warum muss die Klasse Button1 vom Panel "mainPanel" wissen wenn sie nur den actionListener handeln sollte.
Erstmal vielen Dank für die Hilfe!
 

mihe7

Top Contributor
Um gleich mal die Hauptfrage zu beantworten:

Wie sollte man seine JComponents vererben?

Du (noch) gar nicht.

1. static lässt sich in dem Sinn nicht vererben:
Java:
// Test.java:

class A {
    static int x = 10;
}

public class Test extends A {
    public static void main(String[] args) {
        Test.x = 5;
        System.out.println(Test.x);
        System.out.println(A.x);
    }
}

2. es ist eher selten notwendig, irgendwelche von JComponent abgeleiteten Klassen zu erweitern. Schon gar nicht, um irgend etwas zusammen zu bauen: man erweitert ja auch keinen String, weil man eine Zeichenkette mit zwei Buchstaben haben will.

3. Wie kommst Du darauf, irgendetwas vererben zu müssen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
S LayoutManager Button-Anordnung nicht wie es sein sollte AWT, Swing, JavaFX & SWT 4
T der knopf der nicht wollte wie er sollte! AWT, Swing, JavaFX & SWT 3
G welches Layout sollte ich benutzen? AWT, Swing, JavaFX & SWT 2
M während der Roboter arbeitet sollte man sich raushalten. AWT, Swing, JavaFX & SWT 6
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
L Swing ActionListener führt seine Aufgabe nur teilweise aus. AWT, Swing, JavaFX & SWT 7
T label überschriebt seine werte-SWT AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane ändert ungewollt seine Größe AWT, Swing, JavaFX & SWT 2
S Swing JTree und seine Listener... AWT, Swing, JavaFX & SWT 4
E Swing JLabel ändert seine Position nach setText AWT, Swing, JavaFX & SWT 2
M jTree und seine Tücken AWT, Swing, JavaFX & SWT 6
J JSplitpane separator soll nicht seine Position veraendern? AWT, Swing, JavaFX & SWT 3
D GridBaglayout und seine Tücken. AWT, Swing, JavaFX & SWT 13
R JTextField im GridBag ändert seine Größe nicht AWT, Swing, JavaFX & SWT 11
R JComponent malt seine Kinder nicht AWT, Swing, JavaFX & SWT 8
B JLabel ändert seine Position AWT, Swing, JavaFX & SWT 7
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
L JComponents vertauschen AWT, Swing, JavaFX & SWT 2
L JComponents in Array AWT, Swing, JavaFX & SWT 11
A Swing Darstellung von JComponents in Swing AWT, Swing, JavaFX & SWT 14
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
M JComponents wird nicht anggezeigt AWT, Swing, JavaFX & SWT 5
P Selbstgezeichnete JComponents AWT, Swing, JavaFX & SWT 5
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
G JComponents tag vergeben AWT, Swing, JavaFX & SWT 6
M Linie zwischen JComponents AWT, Swing, JavaFX & SWT 5
T JComponents abändern/modifizieren z.b. JSlider AWT, Swing, JavaFX & SWT 2
N Rahmen zum editieren der Größe eines JComponents? AWT, Swing, JavaFX & SWT 2
N Mehrere JComponents übereinander AWT, Swing, JavaFX & SWT 3
G JComponents AWT, Swing, JavaFX & SWT 4
D Problem beim Update von unsichtbaren JComponents mit Timern AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben