Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte mit einer if abfrage einen Text ausgeben wenn ein JButton gedrück wird bei allen beispielen die ich gesehen habe wurde dies in einer zweiten Klasse gemacht mit diesem code habe ich es geamcht
aber bei mir steht an der oberen zeile immer: Montag cannot Be resolved or is not a field
Woran liegt das in der ersten Klasse wurde montag als JButton Bennant
`null` ist ein Schlüsselwort und steht für die Nullreferenz vom Typ `java.lang.Object`.
Der Compiler meckert, dass es auf `java.lang.Object` kein Feld namens "Montag" gibt.
Du meintest sicherlich nicht `null`.
Also ist Montag ein Control und wenn Du einen ActionListener hinzufügen willst, dann solltest Du einen Action Listener hinzu fügen. Da null hinzu zu fügen bringt ja nichts.
Evtl. schaust Du Dir da einmal das Kapitel dazu im Buch "Java ist auch eine Insel" an. Die ganzen Grundlagen scheinen da zu fehlen und die solltest Du Dir einmal aneignen. Da ist das Buch garantiert besser als wenn wir hier versuchen zu raten, was Du evtl. machen wolltest ....
Dann kannst Du zum einen die Variablen so benennen, dass klar ist, was man da hat, von mir aus montagButton oder so.
Und dann kann man da einen ActionListener zuweisen. Das kann man auf viele Weisen machen. http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_19_007.htm zeigt das ein bisschen auf.
Die Frage "was muss hier statt 'null' hin" ist auch eine denkbar schlecht formulierte Frage.
Das ist wie, wenn Leute als einzigen Text in einem Post schreiben: "Ich habe ein Problem, woran liegt es?"
LOL, was? Was für ein Buch liest du denn gerade, das dir sagt, dass du "einen vorhandenen Code" mit Fehlern anreichern sollst?
Vergiss deinen Code und fang bei Seite 1 an.
Generell sollte man nicht mit GUI-Programmierung anfangen. Du merkst (oder solltest es anhand der Kommentare hier), dass du viele Dinge noch nicht richtig verstehst und tw. völlig unsinnige Dinge schreibst. Bring dir erstmal die Java Basics bei und schau dir dann die GUI Programmierung noch mal an.
habs wieder hin bekommen aber bin fast wieder soweit wie bevor ich gefragt habe nur kann er jatzt das al aus dem buch in der zweiten klasse nicht zu ordnen
habe jetzt das alles mit dem nill und al gelöst bekommen und habe wieder das problem das bei mir immer steht: Montag can not resolved or is not a field hat wer ne idee woran das liegen kann ?
Diese Fehlermeldung kommt immer dann, wenn der Compiler eine Referenz auf einen Namen nicht auflösen kann. In deinem Fall also "Montag". Das heißt, du verwendest den Namen "Montag" hier als Member/Feld eines Typs bzw. einer Klasse, die aber kein Feld "Montag" kennt.
Tu halt was richtiges, z.B. Java Grundlagen lernen und höre endlich auf mit GUI Programmierung - wie @Robat schon sagte. Das führt sonst nur zu unendlich großem Frust.
Du merkst (oder solltest es anhand der Kommentare hier), dass du viele Dinge noch nicht richtig verstehst und tw. völlig unsinnige Dinge schreibst. Bring dir erstmal die Java Basics bei und schau dir dann die GUI Programmierung noch mal an.
Nicht "durchlesen" sondern "verstehen"! Da ist ein himmelweiter Unterschied. So ein Buch hab ich auch in 2 Tagen gelesen aber noch lange nicht verinnerlicht. Wenn du die Basics drauf hast und dir dann noch mal anguckst was du jetzt geschrieben hast, würdest du dir vermutlich selber an den Kopf fassen.
Also das scheint ja wieder nur ein Ausschnitt aus dem Code gewesen zu sein, aber ich gehe mal davon aus, dass actionPerformed in der Klasse menü2 ist....
Schnelldurchlauf - extrem wichtige Punkte und bitte im Detail nachlesen und verstehen! Sonst hapert es sofort wieder!
- Erst einmal gibt es eine "übliche Schreibweise" an die man sich halten sollte. Dazu gehört die Gross/Kleinschreibung aber auch die Verwendung von Sonderzeichen. Klasse fangen mit einem Großen Buchstaben an, Variablen mit einem kleinen. Funktionen mit einem Kleinen. Sonderzeichen lassen wir in den Namen bitte weg. Also statt menü2 sollte die Klasse Menue2 heissen.
- Also generell ist es doch so, dass Java eine Typisierte Sprache ist, d.h. alle Daten haben einen bestimmten Typ.
Das kann dann entweder ein primitiver Typ sein (z.B. int) oder eben etwas, das von Object abgeleitet ist (also eine Klasse).
- Klassen erben alle von Object (Wird dann nicht angegeben) oder von einer anderen Klasse. Und Klassen implementieren Interfaces.
- Funktionen haben Parameter und Rückgabewerte (Ausnahme: Konstruktoren). Auf Grund des ersten Punktes muss hier immer ein klarer Typ angegeben werden.
Jetzt schauen wir einmal die Funktion addActionListener an. Diese wünscht sich einen ActionListener als Argument. ActionListener ist ein Interface, welches die Funktion actionPerformed vorgibt.
Also musst Du nun einen ActionListener irgendwo her bekommen. Ein Ansatz ist, dass eine Klasse (z.B. bei dir Menue2) das Interface implementiert, d.h. die Klasse bekommt die Funktion (hast Du gemacht) und es muss angegeben werden, dass die Klasse das Interface implementiert ("class Menue2 implements ActionListener").
Damit wird die Instanz von Menue2 auch ein ActionListener und Du kannst diese als Parameter verwenden, d.h. innerhalb von Menu2 Funktionen kannst Du dann addActionListener "this" übergeben.
Die andere Möglichkeit ist, dass Du eine neue, eigenständige Klasse definierst. Klassen können auch innerhalb von Klassen definiert werden (Inner Class) und das mit Klassenname oder auch ganz ohne Klassenname (Annonyme Klassen).
==> Lies dir zu den Inneren und den Anonymen Klassen etwas durch, damit du das verstanden hast!
Das findest Du auch in dem Kapitel. Da wird dann eine Variable definiert als new ActionListener() { ...}; Es wird also mit dem new Operator eine neue Instanz geschaffen von ActionListener. Von einem Interface oder einer Abstrakten Klasse (=> Nachlesen!) kann man aber keine Instanz erzeugen, da ja die Implementation der (abstrakten) Funktionen fehlt und die kann man noch nachreichen!)
Und statt sowas erst in eine Variable zu schreiben kann man das natürlich auch direkt im Aufruf durchführen:
Java:
someControl.addActionListener(new ActionListener() {
// Implementation of required functions.
});
Und um weniger zuschreiben: Das Ganze kann man dann auch noch über Lambda Expressions vereinfachen. Dann hat man da nur noch etwas wie e -> doSomething() stehen. Aber das würde ich an Deiner Stelle erst einmal ignorieren bis Du alles Andere wirklich verstanden hast.
Und ganz wichtig: Du musst das wirklich im Detail lesen und verstehen! Ich würde Dir sogar raten, dass Du mit jedem etwas rumspielst! Beispiel: Eine Inner Class kann auf die Parent Class zugreifen! Welche Zugriffe gehen? Das muss man verstanden haben, sonst wird es schwer, dies zu nutzen! (Wobei man die ja erst einmal nicht benutzen kann. Man kann ja die eigentliche Klasse ActionListener implementieren lassen aber das kann sehr schnell unübersichtlich werden...
@jan21 tu Dir einen Gefallen und hör auf die Leute hier. Wer versucht, null explizit zu dereferenzieren, hat wirklich extremen Nachholbedarf. Du wirst keinen Gefallen an der Sache finden, wenn Du ständig frustriert auf den Monitor blickst und keine Ahnung davon hast, was die vielen Buchstaben und Zeichen zu bedeuten haben.
Also: nimm Dir ein Buch zur Hand und dann fängst Du mit ganz, ganz kleinen Aufgaben an. Die kannst Du abwandeln und herumexperimentieren. Dann dürfte es relativ schnell "klick" machen und Du verstehst plötzlich, warum etwas wie funktioniert. So macht die Sache dann auch Spaß.