actionlistener timer

silson

Aktives Mitglied
hallo,
ich weiss nicht wie ich das hinbekomme das mein level, wenn ich den button (levelhoch) drücke so bleibt und nicht wieder bei eins anfängt, wenn der timer weiter läuft.
ich weiss das der startactionlistner ja immer mit eins beginnt, weil er ja die instanzvaribale (int levelnumer = 1) ist.
aber ich möchte zb. das das level bei 3 beginnt.
der timer restart funktioniert auch nicht.

upload_2016-4-24_14-20-22.png
Java:
package de.test4.java;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class Main extends JFrame{

public final static int SHOW_TIME_PER_SLIDE = 1000;

    Timer timer = new Timer(SHOW_TIME_PER_SLIDE, new StartHaendler());

    JLabel bild1;
    Icon timerEinerstelle;

    JLabel bild2;
    Icon timerZehnerstelle;

    JLabel bild3;
    Icon level;

    JButton play;

    JButton levelHoch;

    JButton levelRunter;




    public Main(){
    
    
        Icon a = new ImageIcon(getClass().getResource("button/button play blau.jpg"));
        Icon b = new ImageIcon(getClass().getResource("button/button play orange.jpg"));
        play = new JButton("", a);
        play.setRolloverIcon(b);
        play.setBounds(470, 250, 75, 84);
        play.setBorder(null);
        play.addActionListener(new StartHaendler());
        add(play);
    
        Icon c = new ImageIcon(getClass().getResource("button/button level hoch.jpg"));
        levelHoch = new JButton(c);
        levelHoch.setBounds(600, 250, 92, 86);
        levelHoch.setBorder(null);
        levelHoch.addActionListener(new LevelHaendler());
        add(levelHoch);
    
        Icon d = new ImageIcon(getClass().getResource("button/button level runter.jpg"));
        levelRunter = new JButton(d);
        levelRunter.setBounds(320, 250, 92, 86);
        levelRunter.setBorder(null);
//        levelRunter.addActionListener(new LevelHaendler());
        add(levelRunter);
    
        level = new ImageIcon(getClass().getResource("level/level1.jpg"));
        bild3 = new JLabel(level);
        bild3.setBounds(440, 10, 124, 220);
        add(bild3);
    
        timerEinerstelle = new ImageIcon(getClass().getResource("timer/timer0.jpg"));
        bild1 = new JLabel(timerEinerstelle);
        bild1.setBounds(520, 340, 225, 400);
        add(bild1);
    
        timerZehnerstelle = new ImageIcon(getClass().getResource("timer/timer2.jpg"));
        bild2 = new JLabel(timerZehnerstelle);
        bild2.setBounds(270, 340, 225, 400);
        add(bild2);
    }




    class StartHaendler implements ActionListener{
    
        int sekundeEinerstelle = 0;
        int sekundeZehnerstelle = 2;
        int levelNumer = 1;

    
        @Override
        public void actionPerformed(ActionEvent e) {
        
            if(e.getSource()== play){
                timer.start();
            }
        
            sekundeEinerstelle = sekundeEinerstelle -1;
        
            if(sekundeEinerstelle == -1){
                sekundeEinerstelle = 9;
                sekundeZehnerstelle = sekundeZehnerstelle -1;
            }
        
            if(sekundeZehnerstelle == -1 ){
                sekundeZehnerstelle = 1;
                levelNumer = levelNumer +1;
            }
        
            timerEinerstelle = new ImageIcon(getClass().getResource("timer/timer" + sekundeEinerstelle + ".jpg"));
            bild1.setIcon(timerEinerstelle);
        
            timerZehnerstelle = new ImageIcon(getClass().getResource("timer/timer" + sekundeZehnerstelle + ".jpg"));
            bild2.setIcon(timerZehnerstelle);
        
            level = new ImageIcon(getClass().getResource("level/level" + levelNumer +".jpg"));
            bild3.setIcon(level);
        }
    }




    class LevelHaendler implements ActionListener{
    
        int levelNumer = 0;

        @Override
        public void actionPerformed(ActionEvent e) {
        
            if(e.getSource()== levelHoch){
                levelNumer = levelNumer +1;
            }
    
            level = new ImageIcon(getClass().getResource("level/level" + levelNumer +".jpg"));
            bild3.setIcon(level);
            timer.restart();
        }
    }




    public static void main(String[] args) {
    
        Main jf = new Main();
        jf.setTitle("Test4");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(1000, 800);
        jf.getContentPane().setLayout(null);
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
        jf.getContentPane().setBackground(new Color(0, 0, 0));
    }

}
 

Anhänge

  • upload_2016-4-24_14-16-16.png
    upload_2016-4-24_14-16-16.png
    351,4 KB · Aufrufe: 36
Zuletzt bearbeitet von einem Moderator:

silson

Aktives Mitglied
wieso drei oder vier mal sind doch nur 2, einmal starthaendler und einmal levelhaendler...wenn ich den levelbuttonkram in starthaendler integriere habe ich das selbe problem...und in dem andererm thread habe ich es hinbekommen dank joose...
aber hier habe ich das problem weil der timer auch auf die instanz zugreift....und dann noch extra mit dem button...quasi 2mal
 

Meniskusschaden

Top Contributor
Hier erzeugst du den ersten StartHaendler:
Java:
Timer timer = new Timer(SHOW_TIME_PER_SLIDE, new StartHaendler());
Hier erzeugst du den zweiten StartHaendler:
Java:
play.addActionListener(new StartHaendler());
Hier erzeugst du den LevelHaendler:
Java:
levelHoch.addActionListener(new LevelHaendler());
Und hier willst du möglicherweise später einen weiteren LevelHaendler erzeugen, hast ihn aktuell aber auskommentiert.
Java:
//        levelRunter.addActionListener(new LevelHaendler());
Jede der drei Haendler-Instanzen hat eine eigene Variable levelNumer. Wenn eine der drei Haendler-Instanzen seine levelNumer-Variable verändert, ändern sich die beiden anderen levelNumer-Variablen natürlich nicht.
 

silson

Aktives Mitglied
das ist ja mein problem die ändern sich nicht mit...habe jetzt den code umgeschrieben und noch was probiert mit ODER, geht aber auch nicht
hier der code
Code:
package de.test4.java;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class Main extends JFrame{
   
public final static int SHOW_TIME_PER_SLIDE = 1000;
   
    Timer timer = new Timer(SHOW_TIME_PER_SLIDE, new StartHaendler());
   
    JLabel bild1;
    Icon timerEinerstelle;
   
    JLabel bild2;
    Icon timerZehnerstelle;
   
    JLabel bild3;
    Icon level;
   
    JButton play;
   
    JButton levelHoch;
   
    JButton levelRunter;
   
   
   
   
    public Main(){
       
        Icon a = new ImageIcon(getClass().getResource("button/button play blau.jpg"));
        Icon b = new ImageIcon(getClass().getResource("button/button play orange.jpg"));
        play = new JButton("", a);
        play.setRolloverIcon(b);
        play.setBounds(470, 250, 75, 84);
        play.setBorder(null);
        play.addActionListener(new StartHaendler());
        add(play);
       
        Icon c = new ImageIcon(getClass().getResource("button/button level hoch.jpg"));
        levelHoch = new JButton(c);
        levelHoch.setBounds(600, 250, 92, 86);
        levelHoch.setBorder(null);
        levelHoch.addActionListener(new StartHaendler());
        add(levelHoch);
       
        Icon d = new ImageIcon(getClass().getResource("button/button level runter.jpg"));
        levelRunter = new JButton(d);
        levelRunter.setBounds(320, 250, 92, 86);
        levelRunter.setBorder(null);
//        levelRunter.addActionListener(new LevelHaendler());
        add(levelRunter);
       
        level = new ImageIcon(getClass().getResource("level/level1.jpg"));
        bild3 = new JLabel(level);
        bild3.setBounds(440, 10, 124, 220);
        add(bild3);
       
        timerEinerstelle = new ImageIcon(getClass().getResource("timer/timer0.jpg"));
        bild1 = new JLabel(timerEinerstelle);
        bild1.setBounds(520, 340, 225, 400);
        add(bild1);
       
        timerZehnerstelle = new ImageIcon(getClass().getResource("timer/timer2.jpg"));
        bild2 = new JLabel(timerZehnerstelle);
        bild2.setBounds(270, 340, 225, 400);
        add(bild2);
    }
   
   
   
   
    class StartHaendler implements ActionListener{
       
        int sekundeEinerstelle = 0;
        int sekundeZehnerstelle = 2;
        int levelNumer = 1;

       
        @Override
        public void actionPerformed(ActionEvent e) {
           
            if(e.getSource()== play){
                timer.start();
            }
           
            sekundeEinerstelle = sekundeEinerstelle -1;
           
            if(sekundeEinerstelle == -1){
                sekundeEinerstelle = 9;
                sekundeZehnerstelle = sekundeZehnerstelle -1;
            }
           
            if(sekundeZehnerstelle == -1 || (e.getSource()== levelHoch)){ //ist die zeile denn richtig geschrieben
                sekundeZehnerstelle = 1;
                levelNumer = levelNumer +1;
            }
           
            timerEinerstelle = new ImageIcon(getClass().getResource("timer/timer" + sekundeEinerstelle + ".jpg"));
            bild1.setIcon(timerEinerstelle);
           
            timerZehnerstelle = new ImageIcon(getClass().getResource("timer/timer" + sekundeZehnerstelle + ".jpg"));
            bild2.setIcon(timerZehnerstelle);
           
            level = new ImageIcon(getClass().getResource("level/level" + levelNumer +".jpg"));
            bild3.setIcon(level);
        }
    }
   
   
   
   
//    class LevelHaendler implements ActionListener{
//       
//        int levelNumer = 1;
//
//        @Override
//        public void actionPerformed(ActionEvent e) {
//           
//            if(e.getSource()== levelHoch){
//                levelNumer = levelNumer +1;
//            }
//       
//            level = new ImageIcon(getClass().getResource("level/level" + levelNumer +".jpg"));
//            bild3.setIcon(level);
//        }
//    }
   
   
   
   
    public static void main(String[] args) {
       
        Main jf = new Main();
        jf.setTitle("Test4");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(1000, 800);
        jf.getContentPane().setLayout(null);
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
        jf.getContentPane().setBackground(new Color(0, 0, 0));
    }

}
 

Meniskusschaden

Top Contributor
Okay, jetzt hast du also drei StartHaendler. Einer für den Timer, einer für den play-Button und einer für den levelHoch-Button. Hatte ja bereits geschrieben, dass das nichts ändert, weil natürlich wieder jeder seine eigene levelNumer-Variable hat. Ich verstehe nicht, warum du das nicht einfach mal zur Kenntnis nimmst. Dann würdest du auch Lösungsmöglichkeiten sehen, also beispielsweise eine gemeinsame Instanz verwenden oder in allen Instanzen dieselbe Variable benutzen.
 

silson

Aktives Mitglied
aber wieso funktioniert denn das nicht
if(sekundeZehnerstelle == -1 || (e.getSource()== levelHoch)){
sekundeZehnerstelle = 1;
levelNumer = levelNumer +1;
}
ist doch ein ODER drin ob die timerzahl auf null ist und das level springt auf 2,
oder ich drücke den button und das level springt auf 2.
müsste doch dann eigentlich auf level 2 stehen bleiben, oder nicht?


ich bin anfänger, also verstehen ich nicht alles was du schreibst...
kannst du mir nicht nen tip geben?
 

Meniskusschaden

Top Contributor
Ich versuche noch mal eine andere Erklärung. Stelle dir vor, du lebst in einer WG und stellst einen Liter Milch in den Kühlschrank. Jetzt trinkt ein Mitbewohner 200ml und stellt die restliche Milch zurück. Wenn du das nächste Mal nachsiehst, sind es nur noch 800ml. Also alles ganz normal.

In deinem Programm stellst du aber drei Külschränke in die WG und packst in jeden einen Liter Milch. Wenn dein Mitbewohner nun aus einem Kühlschrank 200ml entnimmt, bleiben dort 800ml übrig. In den beiden anderen Kühlschränken ist aber noch jeweils ein ganzer Liter. Jetzt hast du versucht, das Problem dadurch zu lösen, dass du z.B. erst zwei Miele und einen AEG-Kühlschrank hattest und den AEG durch einen dritten Miele-Kühlschrank ersetzt hast.

Also entweder benutzt du nur einen Kühlschrank oder du benutzt weiterhin drei und bewahrst die Milch woanders auf, z.B. indem du sie einfach so in die Wohnung stellst.

Ich glaube, du musst dich noch einmal mit den OOP-Grundlagen beschäftigen, damit du die Begriffe Objekt oder Instanz von dem Begriff Klasse unterscheiden kannst. Eine Klasse erstellst du, indem du sie programmierst, ein Objekt bzw. eine Instanz erstellt du, indem du sie mit new erzeugst.

Falls du mit einer Haendler-Instanz arbeiten willst, darfst du auch nur eine mit new erzeugen. Die musst du dann eben in einer Variablen speichern, damit du sie mehrfach benutzen kannst.

Falls du mit mehreren Haendler-Instanzen arbeiten willst, darfst du deine LevelNummer nur an einer Stelle speichern und musst den Haendler-Instanz den Zugriff darauf ermöglichen.
 

silson

Aktives Mitglied
also das mit dem kühlschrank habe ich jetzt verstanden...
kühlschrank1 new starthaendler
kühlschrank2 new starthaendler
kühlschrank3 new starthaendler
immer wenn ich "new" schreibe ist es ein neuer kühlschrank, richtig???
habe jetzt nur noch ein kühlschrank und es funktioniert
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
E ActionListener Java Basics - Anfänger-Themen 4
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
J Array Actionlistener Java Basics - Anfänger-Themen 9
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
P Erste Schritte ActionListener Java Basics - Anfänger-Themen 2
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb ActionListener Java Basics - Anfänger-Themen 1
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
F ActionListener mit Files etc Java Basics - Anfänger-Themen 12
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
U ActionListener mit JMenuItems verknüpfen Java Basics - Anfänger-Themen 1
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
L Problem bei Java-ActionListener Java Basics - Anfänger-Themen 4
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
JavaNewbie2.0 ActionListener Java Basics - Anfänger-Themen 11
Voreck Actionlistener problem Java Basics - Anfänger-Themen 1
G Im ActionListener eine "äußere" Variable verändern Java Basics - Anfänger-Themen 13
T Fehler beim ActionListener Java Basics - Anfänger-Themen 2
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
P aus ActionListener auf HauptFrame zugreifen Java Basics - Anfänger-Themen 4
A Klassen Bool Actionlistener Java Basics - Anfänger-Themen 2
K Methoden ActionListener wird übersprungen Java Basics - Anfänger-Themen 3
S actionlistener Java Basics - Anfänger-Themen 29
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
J ActionListener Java Basics - Anfänger-Themen 5
A ActionListener Java Basics - Anfänger-Themen 9
R Problem mit ActionListener für Buttons Java Basics - Anfänger-Themen 5
Z ActionListener wird nicht erkannt? Java Basics - Anfänger-Themen 5
T ActionListener Source vergleichen Java Basics - Anfänger-Themen 8
T Frage zum ActionListener Java Basics - Anfänger-Themen 5
R ActionListener mit for Schleife füllen. Java Basics - Anfänger-Themen 4
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
I ActionListener reagiert nicht Java Basics - Anfänger-Themen 6
N Probleme mit ActionListener und Logischer Abfrage Java Basics - Anfänger-Themen 4
D Erste Schritte Buttons mit actionlistener Problem Java Basics - Anfänger-Themen 3
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S ActionListener, Methoden und Variablen Java Basics - Anfänger-Themen 4
X Variablen Actionlistener | Variablen-namen Java Basics - Anfänger-Themen 5
G ActionListener implementieren Java Basics - Anfänger-Themen 12
T Erste Schritte Berechnete Variable im ActionListener zurückführen Java Basics - Anfänger-Themen 6
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
M Button , actionlistener Java Basics - Anfänger-Themen 11
P Erste Schritte JTable mit Daten aus Acces DB füllen und Actionlistener einsetzen Java Basics - Anfänger-Themen 29
M Actionlistener Java Basics - Anfänger-Themen 9
D Problem mit ausgelagertem Actionlistener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
M Klassen Durch den ActionListener das GUI einer anderen Klasse verändern Java Basics - Anfänger-Themen 8
T NullPointerException im ActionListener Java Basics - Anfänger-Themen 3
C Erste Schritte GUI - ActionListener - Exception Nullpointer Java Basics - Anfänger-Themen 5
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E JMenu ActionListener reagiert nicht? Java Basics - Anfänger-Themen 6
V ActionListener in einer for-Schleife Java Basics - Anfänger-Themen 2
S Erste Schritte ActionListener auf Buttons einrichten Java Basics - Anfänger-Themen 3
M Variablen Variable lässt sich durch ActionListener nicht ändern Java Basics - Anfänger-Themen 5
P ActionListener Action Event Java Basics - Anfänger-Themen 5
L ActionListener zerschießt AnchorLayout Java Basics - Anfänger-Themen 8
D ActionListener braucht zwei Klicks auf Button??? Java Basics - Anfänger-Themen 2
Y Actionlistener passt nicht zu Dataset Java Basics - Anfänger-Themen 6
W Problem mit FileWriter / ActionListener Java Basics - Anfänger-Themen 6
F actionListener Java Basics - Anfänger-Themen 3
T ActionListener auslagern Java Basics - Anfänger-Themen 14
S Actionlistener funktionieren nicht in der .jar Java Basics - Anfänger-Themen 9
E ActionListener abwarten lassen? Java Basics - Anfänger-Themen 11
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
H ActionListener Verbesserung möglich? (This) Java Basics - Anfänger-Themen 3
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
V ActionListener bei vielen Modulen Java Basics - Anfänger-Themen 3
J ActionListener Java Basics - Anfänger-Themen 2
T JLabel durch ActionListener ändern Java Basics - Anfänger-Themen 4
S ActionListener Java Basics - Anfänger-Themen 4
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
K Actionlistener Java Basics - Anfänger-Themen 7
M ActionListener außerhalb des EDT ausführen Java Basics - Anfänger-Themen 2
A ActionListener im JMenu - Problem Java Basics - Anfänger-Themen 2
M ActionListener reagiert nicht Java Basics - Anfänger-Themen 4
N ActionListener + GUI Java Basics - Anfänger-Themen 8
H Bewegtes Bild im ActionListener [Problem] Java Basics - Anfänger-Themen 12
D Liste+ActionListener Java Basics - Anfänger-Themen 6
L wie Jframe an ActionListener übergeben Java Basics - Anfänger-Themen 4
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
Luk10 Problem mit ActionListener Java Basics - Anfänger-Themen 6
R Viereck zeichnen über TextField-Eingabe /ActionListener Java Basics - Anfänger-Themen 9
C ActionListener problem beim starten von programmen Java Basics - Anfänger-Themen 3
C ActionListener problem Java Basics - Anfänger-Themen 4
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben