Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen

kneubi

Mitglied
Hallo zusammen

Dieses mal eine Frage zu den Basics im Java...

Meine GUI extenden alle die Klasse "javax.swing.JFrame" weil ich die GUIs mit Swing erstellt habe..

Nun habe ich aber z.B. Methoden die mir "Fehlermeldungen" ausgeben falls irgendwo einen Fehleintrag gemacht wurde.. Diese Meldungen gebe ich aktuell mit folgenden Code aus:


Java:
JOptionPane.showMessageDialog(null, strText, strTitel, JOptionPane.ERROR_MESSAGE);

Ich habe aber insgesamt 4 verschiedene GUI's wo ich diese überall verwenden möchte... aus diesem Grund habe ich eine eigene Klasse erstellt mit dem Namen "Messages"

Java:
package Daten;

import javax.swing.JOptionPane;

public class Messages extends javax.swing.JFrame {
	public static void MessageBox( String selection){
		String strTitel ="";
		String strText = "";
		String strSelection = selection;
		if(strSelection == "noPlayerNameNew"){
			strText = "Es konnte kein Spieler angelegt werden da Sie keinen Spielernamen angegeben haben.";
			strTitel = "Kein Spielername eingegeben!";
		}if (strSelection == "noPlayerNameDel"){
			strText = "Es ist kein Spieler vorhanden den man löschen könnte.";
			strTitel = "Kein Spieler vorhanden!";
		}if (strSelection == "noArmyNameNew"){
			strText = "Es konnte keine Armee angelegt werden da Sie keinen Armeenamen angegeben haben.";
			strTitel = "Kein Armeename eingegeben!";
		}if(strSelection == "noArmyNameDel"){
			strText = "Es ist keine Armee vorhanden die man löschen könnte.";
			strTitel = "Keine Armee vorhanden!";		
		}if(strSelection == "noPlayerSelected"){
			strText = "Kein Spieler ausgewählt.";
			strTitel = "Kein Spieler ausgewählt!";
		}if(strSelection == "noArmySelected"){
			strText = "Keine Armee ausgewählt.";
			strTitel = "Keine Armee ausgewählt!";
		}if(strSelection == "noNameGiven"){
			strText = "Bitte geben Sie einen Namen ein.";
			strTitel = "Eingabe fehlt!";		
		}if(strSelection == "noPointsGiven"){
			strText = "Sie haben die Punktekosten nicht angegeben.";
			strTitel = "Eingabe fehlt!";
		}if(strSelection == "notEnoughtIAP"){
			strText = "Sie besitzen nicht genügend IAP!";
			strTitel = "Nicht genügend Punkte";
		}if(strSelection == "notEnoughtTAP"){
			strText = "Sie besitzen nicht genügend TAP!";
			strTitel = "Nicht genügend Punkte";
		}
		JOptionPane.showMessageDialog(null, strText, strTitel, JOptionPane.ERROR_MESSAGE);
	}
}

Wie ihr seht habe ich diese Klasse dem javax.swing.JFrame angehängt damit ich mit meinen GUI's die Methode aufrufen kann...

Gibt es da eine bessere / elegantere Lösung? Wenn ich es im Java richtig verstehe kann eine Klasse nur eine "vererbung" haben... Könnte ich das ganze schöner Lösen?

Ziel meines auslagern ist es dass alle "Fehlerausgaben" zusammengefasst sind und ich diese nicht quer überall im Code 10x anpassen muss.

Vielen Dank für eure Hilfe

Gruss
Kneubi

PS: Ich versuche meinen Code zu optimieren... wenn es elegantere oder Verbesserungsvorschläge gibt bin ich gerne bereit solche auch anzunehmen... ich bin nun seit ca. 4 Monaten am Javaprogrammieren und bringe mir alles selber bei.. Java ist auch meine erste Objektorientierte Programmiersprache die ich lerne... Aktuell schreibe ich immer sehr viel mit "Public"-Variabeln.. diese versuche ich nun möglichst umzubauen... ich habe auch endlich angefangen Getter und Setter zu verwenden...
 
B

Beni

Gast
Du kannst auch ein "Service" machen: ein Objekt welches eine oder mehrere "showErrorMessage"-Methode anbietet und herumgereicht wird. Ist vielleicht für diesen Fall jetzt etwas Übertrieben, aber kann gerade bei komplexeren Probleme interessant werden. Wenn du noch was lustiges machen willst, wie mehrere Fehlermeldungen zusammenfassen, oder ein Log schreiben, würde ich auf jeden Fall Richtung "Service" gehen.

P.S. benutz lieber eine Enumeration um Fehlerzustände abzubilden, mit Strings vertippt man sich so schnell... den Text kannst du direkt in der Enumeration speichern.
 
Zuletzt bearbeitet von einem Moderator:

kneubi

Mitglied
Hallo erstmal und vielen Dank für deine Antwort.

Ich nehme an mit der "Map" Meinst du eine Hash-Map?

Habe mir das Thema Hash-Map bereits einmal angeschaut, bisher habe ich aber nur mit ArrayLists gearbeitet... bin es mir gewohnt mit Indexen zu arbeiten... Hash-Map ist ja sozusagen eine ArrayList nur hat man noch einen "Referenznamen" anstatt eines Indexes?


Könntest du mir vielleicht noch einen Link zu einem einfachen Enumerationbespiel zukommen lassen? bzw. einen "minimalcode"? Ich bin gerade bei im Internet an der suche wie dies funktioniert.. da ich eine Enumeration noch nie verwendet habe... allerdings bisher noch nichts gefunden das für mich verständlich ist...In Java gibts wohl für alles bereits irgendetwas "vordefiniertes" das man verwenden kann.. nur sollte man wissen wie dies heisst und funktioniert

WAs mir noch eingefallen ist... wenn ich anstatt "extends" einen Import meiner Klasse mache.. funktioniert dies identisch?

Ich habe nie ganz begriffen was der unterschied zwischen "import" und "Extends" ist...
 

turtle

Top Contributor
Wie bereits angedeutet, solltest Du eine Methode haben, die über Enums "getrieben" wird und nicht über String gehen.
Methoden sollten auch mit einem Kleinbuchstaben beginnen und ein Verb darstellen.
Java:
 public static void showMessageBox((ErrorCode errorCode)
Weiterhin kannst Du dir MessageFormat und auch ResourceBundles näher anschauen, da doch recht häufig Parameter übergeben werden, die in Fehlermeldungen eingefügt werden wollen. Diese Texte möchte man aber praktisch nie im Java-Code, sondern besser in ResourceBundles ausgelagert haben.

"Meine" Message-Klasse würde von gar nichts erben!
Java:
public class Messages
 
Zuletzt bearbeitet:
F

Firephoenix

Gast
WAs mir noch eingefallen ist... wenn ich anstatt "extends" einen Import meiner Klasse mache.. funktioniert dies identisch?

Ich habe nie ganz begriffen was der unterschied zwischen "import" und "Extends" ist...

Import: Auf die importierte Klasse kann zugegriffen werden ohne den vollen Namen zu benutzen.

z.B. kannst du nach dem import von javax.swing.JOptionPane diese so benutzen:

Java:
JOptionPane.irgendEineMethode()

ohne den Import müsstest du den vollen Klassennamen angeben:

Java:
javax.swing.JOptionPane.irgendEineMethode()

Extends dagegen ändert tatsächlich deine aktuelle Klasse und drückt soviel aus wie "Meine Klasse verhält sich wie die Klasse von der ich erbe" bzw "Meine Klasse ist ein Spezialfall der Klasse von der ich erbe"

Erben von JFrame ist übrigens kein guter Stil (http://www.java-forum.org/blogs/firephoenix/182-leidige-extends-jframe.html)

Auf alle Fälle empfehle ich dir, dich genauer in die Objektorientierung einzuarbeiten:
Galileo Computing :: Objektorientierte Programmierung - Das umfassende Handbuch

Dann wird auch schnell klar, wann man wie erbt, bzw wann das erben nicht sinnvoll ist.

Weitere Sprachgrundlagen (imports, Klassenaufbau, ...) findet man per google relativ gut.

Gruß
 
B

Beni

Gast
Mit "x extends y" baust du eine "x ist ein y" Beziehung.
Mit "import x.y.z" sagst du dem Compiler, dass wenn er ein "z" sieht, er in wirklichkeit ein "x.y.z" sieht.

Imports nehmen dir Schreibarbeit ab, haben aber ansonsten keinen Einfluss. Extends (Vererbung) geht *viel* tiefer, sie hat einen Einfluss wie die Daten in deinem Programm fliessen.


Ich habe zwar meinen Text editiert, aber ja, eine HashMap wäre ok. Der Vorschlag von turtle find ich allerdings besser als meine eigener.

Eine Enumeration kann ganz einfach sein:
Java:
public enum ErrorCode{
  NO_PLAYER_NAME,
  NO_PLAYER_SELECTED
}

Und eine Map könnte so aussehen:
Java:
Map<ErrorCode, String> errors = new HashMap<ErrorCode, String>();
 ...
// initialisieren, kann irgendwo geschehen.
errors.put( ErrorCode.NO_PLAYER_NAME, "Wo ist der Spieler?" );
errors.put( ErrorCode.NO_PLAYER_SELECTED, "Selektier mal einen Spieler!" );

...

// und so wird das benutzt
ErrorCode code = ... // Parameter einer Methode
String message = errors.get( code );

ResourceBundles würden ganz ähnlich funktionieren, sie sind auch wie eine Map aufgebaut.
 

kneubi

Mitglied
Danke für eure Informationen....

Ich habe es wie folgt umgebaut:

Klasse "Messages" im Package "Daten"

Java:
package Daten;

import javax.swing.JOptionPane;

public class Messages{
	public static void showMessageBox(Error selection){
		JOptionPane.showMessageDialog(null, selection , "Fehler!", JOptionPane.ERROR_MESSAGE);
	}
	
	static public enum Error {
		noPlayerNameNew,noPlayerNameDel,noArmyNameNew,noArmyNameDel,noPlayerSelected,noArmySelected,noNameGiven,noPointsGiven,noSizeGiven,notEnoughtIAP,notEnoughtTAP
	}
		
	public static String word(Error selection){
		String strText="";
		switch (selection){
			case noPlayerNameNew:
				strText = "Es konnte kein Spieler angelegt werden da Sie keinen Spielernamen angegeben haben.";
				break;
			case noPlayerNameDel:
				strText = "Es ist kein Spieler vorhanden den man löschen könnte.";
				break;
			case noArmyNameNew:
				strText = "Es konnte keine Armee angelegt werden da Sie keinen Armeenamen angegeben haben.";
				break;
			case noArmyNameDel:
				strText = "Es ist keine Armee vorhanden die man löschen könnte.";
				break;
			case noPlayerSelected:
				strText = "Kein Spieler ausgewählt.";
				break;
			case noArmySelected:
				strText = "Keine Armee ausgewählt.";
				break;
			case noNameGiven:
				strText = "Bitte geben Sie einen Namen ein.";
				break;
			case noPointsGiven:
				strText = "Sie haben die Punktekosten nicht angegeben.";
				break;
			case noSizeGiven:
				strText = "Geben Sie bitte die neue Einheitengrösse an.";
				break;
			case notEnoughtIAP:
				strText = "Sie besitzen nicht genügend IAP!";
				break;
			case notEnoughtTAP:
				strText = "Sie besitzen nicht genügend TAP!";
				break;
		}
		return strText;
	}

}

In der Klasse "MainGUI" im Package "GUI" rufe ich so die Fehlermeldung auf:
Java:
import Daten.Messages;
import Daten.Messages.Error;

Messages.showMessageBox(Error.noPlayerNameNew);

Hattet ihr dies so gemeint oder habe ich etwas komplett falsches verstanden?
 

faetzminator

Gesperrter Benutzer
Warum nicht einfach...?
Java:
public enum ErrorCode{
    NO_PLAYER_NAME("Wo ist der Spieler?"),
    NO_PLAYER_SELECTED("Selektier mal einen Spieler!");

    public final String text;

    private ErrorCode(String text) {
        this.text = text;
    }
}
Java:
public void showDialog(ErrorCode errorCode) {
    JOptionPane.showMessageDialog(null, errorCode.text, "Error!", JOptionPane.ERROR_MESSAGE);
}
 

kneubi

Mitglied
Das Beispiel anhand ich den Code geändert habe war in der "komplizierten" variante ... Vielen Dank für deine Korrektur.. :)

Ich habe zumindest erreicht was ich wollte. Vielen Dank für eure Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
C Methoden Auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 10
J Teile der Funktionalität von Klassen in Methoden platzieren. Java Basics - Anfänger-Themen 3
M Methoden (in Klassen) Java Basics - Anfänger-Themen 4
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
arjoopy Methoden Methoden anderer Klassen Java Basics - Anfänger-Themen 6
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
T Wie finde ich passende Java Klassen & Methoden? Java Basics - Anfänger-Themen 4
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
R Anfängerfrage zu Methoden in Vererbte Klassen Java Basics - Anfänger-Themen 2
C Methoden aus Klassen anzeigen lassen Java Basics - Anfänger-Themen 14
B Übungsaufgabe zu Klassen, Methoden ... Java Basics - Anfänger-Themen 2
K Methoden als Klassen benutzen Java Basics - Anfänger-Themen 42
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
staxx6 ArrayList Methoden aufrufen bestimmter Klassen Java Basics - Anfänger-Themen 4
J Problem mit Klassen und Methoden Java Basics - Anfänger-Themen 7
W Kontenverwaltungssystem (Klassen, Methoden) Java Basics - Anfänger-Themen 3
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
H Klassen und Methoden Java Basics - Anfänger-Themen 12
D Kapselung Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 7
A Klassen Methoden... Java Basics - Anfänger-Themen 15
I Objekte an andere Klassen/Methoden übergeben? Java Basics - Anfänger-Themen 5
T Vererbung und Zugriff auf Methoden von abgeleiteten Klassen Java Basics - Anfänger-Themen 2
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
T Klassen, Objekte, Methoden Java Basics - Anfänger-Themen 9
U 2 Klassen mit get und set Methoden Java Basics - Anfänger-Themen 11
F Stilfrage: Klassen & Methoden Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Rückgabewert Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Java Basics - Anfänger-Themen 2
J Verständniss Frage zu Klassen, Objekte und Methoden Java Basics - Anfänger-Themen 8
L Methoden von anderen Klassen Aufrufen Java Basics - Anfänger-Themen 5
J Methoden/Klassen Problem Java Basics - Anfänger-Themen 9
E 2 Klassen - Problem bei Methoden Java Basics - Anfänger-Themen 22
F Auf Methoden anderer Klassen zugreifen? Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
D In Gui auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 2
U Methoden aus Programmfremden Klassen nutzen Java Basics - Anfänger-Themen 2
M Klassen/Methoden API Java Basics - Anfänger-Themen 6
G ArraylList aus Klassen --> Methoden der Klassen aufrufen Java Basics - Anfänger-Themen 3
T Funktionen Plotter - Klassen/Methoden/Funktionen Java Basics - Anfänger-Themen 13
H Wie kann ich auf Methoden von anderen Klassen zugreifen? Java Basics - Anfänger-Themen 1
M Methoden von Klassen aufrufen Java Basics - Anfänger-Themen 4
A Methoden von externen Klassen aufrufen Java Basics - Anfänger-Themen 3
G Übertragen von Variablen auf andere klassen oder Methoden Java Basics - Anfänger-Themen 2
J Methoden aus fremden Klassen verwenden Java Basics - Anfänger-Themen 6
T Mehrere paint Methoden in unterschiedlichen Klassen Java Basics - Anfänger-Themen 7
K Methoden Klassen Bsp. Bankkonto Java Basics - Anfänger-Themen 4
M Klassen/Methoden Java Basics - Anfänger-Themen 10
L Zusammenhang Methoden, Klassen, Objekte, static - sun doku Java Basics - Anfänger-Themen 4
C Methoden von verschieden Klassen in eine Klasse reinpacken? Java Basics - Anfänger-Themen 4
T Methoden / Klassen Problem Java Basics - Anfänger-Themen 11
G Methoden/Klassen elementare Probleme Java Basics - Anfänger-Themen 3
E Synchronized - Methoden in verschied. Klassen Java Basics - Anfänger-Themen 3
G dringende frage zu klassen und methoden ( klassendiagramm) Java Basics - Anfänger-Themen 19
L Klassen/Methoden/Objekt/Vererbung Java Basics - Anfänger-Themen 6
frau-u Problem mit Klassen und Vererbung - benutzen von Methoden Java Basics - Anfänger-Themen 2
L Klassen und Methoden für Dateivergleiche. Java Basics - Anfänger-Themen 4
G Was sind Klassen, Objekte und Methoden? Java Basics - Anfänger-Themen 3
H Methoden aus anderen Klassen aufrufen Java Basics - Anfänger-Themen 3
K klassen/methoden Java Basics - Anfänger-Themen 4
M Zugriff auf Klassen/Methoden im Hauptverzeichnis Java Basics - Anfänger-Themen 2
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
J Argumente in Methoden übergeben Java Basics - Anfänger-Themen 1
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
Renjiroo Java Bmi Rechner mit Methoden Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
L Rekursive Methoden Java Basics - Anfänger-Themen 14
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W Methoden aufrufen - auch klassenübergreifend? Java Basics - Anfänger-Themen 9
Kotelettklopfer Methoden nicht aufrufbar Java Basics - Anfänger-Themen 34
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben