Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht

PinkMuffin

Bekanntes Mitglied
Hallo,
ich bin noch ein Java-Anfänger, daher weiß ich nicht 100%, ob mein Fehler überhaupt mit dem Layout zu tun hat, oder ob ich ein Problem mit der
Erreichbarkeit der Variablen habe..

2020-08-31 10_56_47-Window.png
Hier hab ich ein "Kartendeck" erzeugt (ich will mit dem CardLayout arbeiten, daher der Name). Es geht mir um die Variable "punkte".
Eigentlich müssten andere Klassen doch auf die Variable zugreifen können? (Ich habe es auch schon mit einem getter/setter probiert), jedoch bleibt die Variable aus mir unerklärlichen Gründen immer auf 0 eingestellt.


2020-08-31 10_58_24-Window.png
Ich erstelle hier ein paar Panels, die aber für die Frage nicht relevant sind, bis auf das Panel "ranking" und das dazugehörige rankingLabel.
Evtl noch das Frage-Panel, hier sind die Buttons, mit einem ActionListener, der eigentlich den Punktestand überschreiben soll, dass eben, wenn das ranking-Label aufgerufen wird, dort der aktuellste Punktestand angezeigt wird.

2020-08-31 11_00_04-Window.png

Hier ist jetzt mein ActionListener. Eigentlich kann er auf Variablen der Deck-Klasse zugreifen, er hat "card" ja auch daraus entnommen. Auf die Fragen-Klasse kann er prinzipiell auch zugreifen, er holt sich daraus die ArrayList "buttons.
Ich habe schon verschiedene Varianten probiert, die Ausgabe ist immer "Ihr Highscore ist: 0". Auch wenn ich das Ranking-Label erst im ActionListener beschriftet oder sogar erst dort geaddet habe. Ich hab vorsichtshalber auch mal "repaint()" ausprobiert (auch wenn ich als Anfänger noch nicht ganz sicher weiß, was diese Methode macht, geholfen hat sie auf jeden Fall nicht).
Also irgendwie kann mein ActionListener nicht meinen Punktestand überschreiben, das Label lässt sich nämlich im Listener verändern, es müsste also evtl an meinen modifiern liegen?

Ich wäre um jede Hilfe dankbar,
LG
Lena

EDIT: Die Bezeichnung "Hauptklasse" in meinem Fragetitel ist falsch. Ich meinte damit die Deck-Klasse. Meine Hauptklasse mit der main-Methode ist eine andere, die erstellt aber nur ein neues Objekt der Deck-Klasse.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Code bitte immer als Code direkt hier im Forum und Code-Tags ([code=java]//code...[/code]) und nicht als Screenshot!
 

mrBrown

Super-Moderator
Mitarbeiter
Vermutlich hast du entweder zwei Instanzen von Deck (und eine davon wird angezeigt und in der anderen wird es geändert) oder zwei unabhängige Variablen die zufällig beide punkte heißen, aber sonst nichts miteinander zu tun haben.
Steht der Actionlistener direkt in der Deck-Klasse?
 

PinkMuffin

Bekanntes Mitglied
Okay, dann nochmal direkt als Code, hier ist die Deck-Klasse. Mein Listener steht direkt in der Deck-Klasse
(ich weiß, dass es suboptimal ist, dass auch noch die Klasse Fragen nicht ausgelagert ist, allerdings hatte ich sonst noch andere Probleme, die ich auch nicht wirklich anders zu lösen wusste). Ein Objekt der Deck-Klasse wird nur einmal in der Start-Klasse erzeugt, danach nicht mehr und ich bin jetzt noch einmal drüber gegangen, habe aber eigentlich nur eine Variable, die "punkte" heißt.
Java:
public class Deck
{
    JFrame frame;
    JPanel deck, login, fragePanel, ranking;
    CardLayout card;
    JButton highscore, restart, play, exit;
    int punkte=0;
    String nutzername;
    JLabel rankingLabel = new JLabel();

    public Deck()
    {
        frame = new JFrame("Swing - Quiz");
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        deck = new JPanel();
        DerHandler handler = new DerHandler();

        //Buttons erzeugen
        play = new JButton("Play");

        play.addActionListener(handler);

        exit = new JButton("Exit");
        exit.addActionListener(new ActionListener()
        {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
        });

        highscore = new JButton("Highscore");
        highscore.addActionListener(handler);

        //An dieser Stelle werden die anderen Panels erzeugt
        login = new Login();
        login.add(exit);
        login.add(play);

        ranking = new JPanel();
        rankingLabel.setText(login.getNutzer() + "Ihr Highscore beträgt: " + punkte);
        ranking.add(rankingLabel);card = new CardLayout();

        fragePanel = new Fragen();

        //Panels werden dem CardLayout zugefügt
        deck.setLayout(card);
        deck.add(login, "Login");
        deck.add(fragePanel, "Fragen");
        deck.add(ranking, "Ranking");

        frame.add(deck);
        frame.setVisible(true);
        frame.pack();
    }


    public class Fragen extends JPanel
    {
        ArrayList<String> fragen;
        ArrayList<String> antwort;
        ArrayList<String> f1,f2,f3;
        JButton b1,b2,b3,b4;
        JLabel frage;
        JPanel br1, br2;
        ArrayList<JButton> buttons;
        JButton rAntwort;

        public Fragen()
        {
            this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
            frage = new JLabel();
            fragen = new ArrayList<String>();
            fragen.add("Wie viele Pflanzen stehen bei Sabrina?");
            fragen.add("Wie heißt der Hund von Ralf Weinmann?");
            fragen.add("Welche Farbe hat das cortility Logo (Außer schwarz)?");
            antwort = new ArrayList<String>();
            antwort.add("8");
            antwort.add("Zoey");
            antwort.add("magenta");

            f1 = new ArrayList<String>();
            f1.add("5");
            f1.add("Martha");
            f1.add("gelb");

            f2 = new ArrayList<String>();
            f2.add("3");
            f2.add("Marley");
            f2.add("blau");

            f3 = new ArrayList<String>();
            f3.add("6");
            f3.add("Bello");
            f3.add("Es ist nur schwarz.");

            b1 = new JButton();
            b2 = new JButton();
            b3 = new JButton();
            b4 = new JButton();

            buttons = new ArrayList<JButton>();
            buttons.add(b1);
            buttons.add(b2);
            buttons.add(b3);
            buttons.add(b4);
            zuordnen();
            br1 = new JPanel();
            br2 = new JPanel();

            this.add(frage);
            this.add(br1);
            this.add(br2);
            br1.add(b1);
            br1.add(b2);
            br2.add(b3);
            br2.add(b4);

            /*this.add(buttons.get(0));
            this.add(buttons.get(1));
            this.add(rAntwort);
            this.add(buttons.get(2));*/



        }


        public void zuordnen()
        {
            DerHandler handler = new DerHandler();
            int random = (int) (Math.random()*3);
            int frageRandom = (int) (Math.random()*3);
            String antwort1 = antwort.get(frageRandom);
            String falsch1 = f1.get(frageRandom);
            String falsch2 = f2.get(frageRandom);
            String falsch3 = f3.get(frageRandom);
            String frageTitel = fragen.get(frageRandom);

            frage.setText(frageTitel);

            rAntwort = buttons.get(random);
            buttons.remove(random);
            rAntwort.setText(antwort1);

            buttons.get(0).setText(falsch1);
            buttons.get(1).setText(falsch2);
            buttons.get(2).setText(falsch3);

            rAntwort.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent e) {
                    deck.remove(fragePanel);
                    fragePanel = new Fragen();
                    deck.add(fragePanel, "Fragen");
                    card.show(deck, "Fragen");
                    punkte++; //schon mit einem getter/setter ausprobiert, passiert das gleiche
                    
                }
            });


            for (int i=0; i<buttons.size(); i++)
            {
                buttons.get(i).addActionListener(new ActionListener()
                {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {

                        card.show(deck, "Ranking");

                    }
                });

            }

        }


    }


    public class DerHandler implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent event)
        {
            if (event.getSource()== highscore)
            {

                card.show(deck, "Ranking");
            }
            else if (event.getSource()== play)
            {
                card.show(deck, "Fragen");
            }

        }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
L actionListener für Button AWT, Swing, JavaFX & SWT 97
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
R ActionListener in Actionlistener AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
coolian ActionListener funktonirt nicht richtig auf JMenuItem AWT, Swing, JavaFX & SWT 4
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
Blender3D einzelner ActionListener vs anonyme ActionListener AWT, Swing, JavaFX & SWT 10
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
S While Schleife im Actionlistener AWT, Swing, JavaFX & SWT 1
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
Liondary GUI - ActionListener AWT, Swing, JavaFX & SWT 7
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
E ActionListener führt falsche Funktion aus AWT, Swing, JavaFX & SWT 6
Sin137 ActionListener in MVC AWT, Swing, JavaFX & SWT 7
M ActionListener und mathematische Methoden AWT, Swing, JavaFX & SWT 13
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 ActionListener Variablen AWT, Swing, JavaFX & SWT 13
Y ActionListener AWT, Swing, JavaFX & SWT 2
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
A Gui für Vokabeltrainer (ActionListener) AWT, Swing, JavaFX & SWT 14
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
T Einfaches Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
K GUI, Button, ActionListener - ein paar Einsteigerprobleme AWT, Swing, JavaFX & SWT 1
W Verschachtelter ActionListener AWT, Swing, JavaFX & SWT 0
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
K Swing JMenu und ActionListener AWT, Swing, JavaFX & SWT 4
A Swing ActionListener AWT, Swing, JavaFX & SWT 8
V ActionListener Abhängigkeitenproblem AWT, Swing, JavaFX & SWT 6
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
J ActionListener für Buttons AWT, Swing, JavaFX & SWT 3
M Event Handling ActionListener übergeben ich checks net AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
S Button (ActionListener) funktioniert nicht, wenn y-Koordinate verändert wird AWT, Swing, JavaFX & SWT 5
L Swing ActionListener führt seine Aufgabe nur teilweise aus. AWT, Swing, JavaFX & SWT 7
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
P Actionlistener - 3 klassen - kompliziert - auf methoden zugreifen AWT, Swing, JavaFX & SWT 3
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
D AWT eigenem Knopf ActionListener zuweisen AWT, Swing, JavaFX & SWT 24
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
P Swing Seltsames ActionListener-Verhalten AWT, Swing, JavaFX & SWT 7
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
C In der Schleife ActionListener aktivieren AWT, Swing, JavaFX & SWT 3
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
P Swing JPanel mit ActionListener mehrfach verwenden AWT, Swing, JavaFX & SWT 8
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
C ActionListener AWT, Swing, JavaFX & SWT 6
Corben ActionListener Error AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
I Swing Problem mit InputMap bei JButton (ActionListener) AWT, Swing, JavaFX & SWT 3
S Swing JButton mit ActionListener innerhalb einer JTable AWT, Swing, JavaFX & SWT 4
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
M AWT Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
S ActionListener "nach oben weitergeben" AWT, Swing, JavaFX & SWT 10
M Anonymer ActionListener AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
B Swing Formular mit mehreren Elementen - wie die ActionListener-Verarbeitung lösen? AWT, Swing, JavaFX & SWT 2
M getSource() findet Button nicht - ActionListener AWT, Swing, JavaFX & SWT 4
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
G Swing Button ActionListener macht komische Sachen AWT, Swing, JavaFX & SWT 19

Ähnliche Java Themen

Neue Themen


Oben