dies ist mein erster Beitrag hier in diesem Forum da ich gerade erst mit Java angefangen habe. Ich komme aus der C-Programmierung, also nicht ganz ohne Erfahrung. Erst mal einen großen Respekt, an alle die sich hier so aktiv beteiligen.
Jetzt zu meiner Frage. Ich möchte gerne in einer Applikation eine Methode in der Datei Functions.java aufrufen und den Inhalt der Variable Userlevel verändern. Leider ändert sich der Inhalt nicht.
Functions f =newFunctions();
f.chanceUserLevel("A");
Die Methode showUserlevel() funktioniert ohne Probleme. Diese rufe ich wie folgt auf.
Java:
JLabelUserlevel=newJLabel(f.showUserlevel());
Auf der Swing Oberfläche bekomme ich immer nur den Initialisierungsinhalt angezeigt.
Leider finde ich den Fehler nicht. Wäre super wenn ihr mir helfen könntet.
Jetzt zu meiner Frage. Ich möchte gerne in einer Applikation eine Methode in der Datei Functions.java aufrufen und den Inhalt der Variable Userlevel verändern. Leider ändert sich der Inhalt nicht.
Der Fehler liegt nicht an der Klasse Functions oder an desen Aufruf, sondern an der GUI. Leider hast du dessen Code nicht gepostet von daher können wir dir da nicht helfen.
Aber ein paar Tipp gibts:
1.
Java:
newString("NONE");
macht man in Java absolut nie, man schreibt immer einfach nur
Java:
"NONE";
2. die Methode showUserlevel sollte nach den naming conventions getUserlevel heissen, da sie ja einfach nur einen Wert zurückgibt. Die Methode chanceUserLevel sollte dementsprechend setUserlevel heissen.
3. System.exit(0); sollte man im Prinzip nie aufrufen, da es erbarmungslos die komplette Java VM abschiesst, völlig egal ob ein anderer Teil des Codes vllt. noch was machen will oder ein anderer Thread noch läuft...
Falls du Probleme damit hast das Java trotz schließen deines JFrames immernoch weiterläuft, ruf mal auf das JFrame-Object
importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;@SuppressWarnings("serial")publicclassMainWindowextendsJFrameimplementsActionListener{Functions f =newFunctions();LoginWindowLoginWindow=newLoginWindow("Login");// Initialisierungen für NorthJPanelNorthpanel=newJPanel();// Initialisierungen für CenterJPanelCenterpanel=newJPanel();// Initialisierungen für South;JPanelSouthpanel=newJPanel();JLabelUserlevel=newJLabel(f.getUserlevel());JButtonBeenden=newJButton("Programm beenden");publicMainWindow(String titel){super(titel);setLayout(newBorderLayout());// Region Northadd("North",Northpanel);// Region Centeradd("Center",Centerpanel);// Region SouthSouthpanel.setLayout(newFlowLayout(FlowLayout.RIGHT));Southpanel.add(Userlevel);Southpanel.add(Beenden);add("South",Southpanel);Beenden.setActionCommand("Beenden");Beenden.addActionListener(this);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );}publicvoidactionPerformed(ActionEvent e){if(e.getActionCommand().equals("Beenden")){
f.exit();}else{getContentPane().setBackground(Color.green);// Nur zum testen}}}
Ich hab mir den Userlevel an dieser Stelle nur angezeigt, um festzustellen ob sich was ändert.
Die Methoden habe ich jetzt in set und get Methoden geändert.
Ich sehe nicht, wie wo du überhaupt dem Label sagst, dass es einen neuen String anzeigen soll.
Java:
JLabelUserlevel=newJLabel(f.getUserlevel());
Das führt nur dazu, dass das label einen String anzeigt, diese ist nicht damit verbunden, was du da in f als variable hinterlegst. Wenn du also nach der Initialisierung des Labels in der Zeile was an f änderst, so dass du mit getUserLevel einen anderen String zurückbekommen würdest, dann musst du das auch an das label weiterreichen:
Java:
userlevel.setText(f.getuserLevel());
Das müsste dann in den ActionListener
Nebenbei schreibt man Variablen in Java am Anfang klein.
Ich will nicht eine Änderung anzeigen. Der Userlevel wird direkt beim Starten der Applikation als erstes in public static void main gesetzt. Danach wird erst das Fenster aufgebaut. Leider Zeigt er mir aber nicht den geänderten Wert an, weswegen ich davon ausgehe, das er gar nicht umgeschrieben wird.
Ich bin gerade dabei einen Button einzubauen, mit dem ich den Userlevel ändern kann. Mal sehen was dann passiert. Dann werde ich deine Antwort berücksichtigen. Daran hätte ich so wahrscheinlich gar nicht gedacht. Danke dafür.
Edit: Mit dem Button funktioniert das ändern. Auf die Idee bin ich noch gar nicht gekommen. Jetzt muss ich meinen Fehler mal an einer anderen stelle suchen. Danke für eure Unterstützung.
Hier erstellst du eine Functions-Instanz:
[JAVA=10]Functions f = new Functions();[/code]
Hier setzt du den Text des JLabel:
[JAVA=22]JLabel Userlevel = new JLabel(f.getUserlevel());[/code]
Dazwischen wurde [c]f[/c] nicht bearbeitet.
Du kannst gar nicht zu Beginn in der main-Methode diese Instanz bearbeitet haben, da sie erst beim Erzeugen einer MainWindow-Instanz erstellt wird.
Sprich: Jede Functions-Instanz hat eine eigene Variable "userlevel" vom Typ String, unabhängig von weiteren im Programm existierenden Functions-Instanzen.
OK, danke.
Dann ist es wohl hier in Java nicht so einfach, einer global Verfügbare Variable zu erzeugen, wenn jede Instanz ihre eigenen hat. Deswegen bin ich ja in die Functions ausgewichen. Aber wenn das bei jeder neuen Instanz auch neu gesetzt wird, bringt mir das nix.