So verlängern Sie die JFrame und JPanel in eine main Klasse?
So, ich möchte meine main-Klasse zu erweitern, sowohl JFrame und JPanel. Wie kann ich dies tun?
Beispiel:
public class mainClass extends JFrame {
//code here
}
Wie würde ich auch verlängern JPanel für die gleiche Klasse?
Vielen Dank im Voraus!
- Sie können es nicht tun. Jpanel und jframe sind beide Klassen und java unterstützt keine Mehrfachvererbung von Klassen. Nur eine Klasse und vielen Schnittstellen.
- nicht erweitern Sie Rahmen oder anderen top-level-Container. Stattdessen erstellen & verwenden Sie eine Instanz von einem. Nur verlängern
JPanel
wenn Sie das hinzufügen oder ändern von Funktionen. Sie werden tun, entweder von diesen Dingen? Wenn ja, was konkret?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java Mehrfachvererbung nicht unterstützt. Zu den möglichen Lösungen gehören die Codierung eine innere Klasse in der main-Klasse, die Sie erweitert JPanel und dann noch eine innere Klasse, die Sie erweitert JFrame. Sie können aber auch einfach code von zwei separaten (nicht-innen) Klassen, die sich die jeweiligen Klassen, die den gemeinsamen Ansatz, den ich verwenden würde.
Lassen Sie mich die Antwort, die Sie durch eine Frage:
Kann einen Sohn haben zwei Väter in der gleichen Zeit? NEIN, weil wir nicht wissen, wer der wirkliche Vater ist, aber nach DNA-Tests, die Sie wissen, wer das echte.
In java gibt es keine DNA-Tests, sorry dafür, daher Mehrfachvererbung nicht erlaubt.
In deinem Fall, wenn die Klasse erweitert, von beiden
JFrame
undJPanel
wird, was das Verhalten dieser Klasse, panel oder frame?Können Sie einfach nicht. Java unterstützt keine Mehrfachvererbung, so können Sie nicht haben eine Klasse, die sich zwei verschiedenen Klassen.
Und in Ihrer situation sehe ich nicht, warum würden Sie brauchen eine Klasse die sich sowohl
JFrame
undJPanel
wie Sie sind zwei verschiedene Dinge für verschiedene Zwecke verwendet.Vielleicht müssen Sie einfach in der Lage sein zu definieren, Ihren eigenen Rahmen und panel innerhalb einer einzigen Klasse? Sie können innere Klassen für diese:
Können Sie nicht, Java unterstützt nur die einfache Vererbung.
Und meiner Meinung nach konkrete Vererbung ist gefährlich, wenn Sie nicht 'richtig' Ursache, die Sie brechen kann Objekt-Prinzipien und Verträge (Liskov-Substitution-Prinzip, das Prinzip der Einzigen Verantwortung), schwierig zu pflegen etc.
Also die eigentliche Frage ist, warum Sie benötigen, um erweitern
JFrame
undJPanel
?Können Sie sicher erreichen, was Sie wollen, zu tun, mit anderen Techniken.
Zum Beispiel,
Zusammensetzung.
Wenn Sie überschreiben müssen einige spezifische Verhaltensweisen beispielsweise
paintComponent
im JPanel die Sie tun können (anonymous class)Oder machen Sie eine innere Klasse
JFrame und JPanel werden Klassen an, so dass Sie nicht direkt Erben, die zwei Klassen zur gleichen Zeit.
Ersten Sie erstellen JPanel und fügen Sie die Komponenten.
Legen Sie dann die Jpanel zu JFrame (JFrame enthält ein JRootPane als sein einziges Kind.)
class Beispiel extends JFrame{
}