Javax.swing - Timer(2 Button)

M

mr bond345

Gast
Hallo zusammen!

Aufgabe ist: Ein Fenster immer von rot auf grün zu wechseln. Es gibt einen roten button und einen grünen. Wenn man richtig drückt, dann soll gezählt werden, wenn man falsch drückt und wenn man das drücken verpasst.

Schaut mal in Zeile 60, eigentlich müsste das ja funktionierte? Aber wenn ich das Programm im eclipse ausführe, dann passiert nix, es kommt nicht mal das Fenster.

Jedoch, wenn ich die if-anweisung(ohne der while) in den timer_actionlistener reinmachen, dann funktioniert alles.

Warum bitte funktioniert die while hier nicht? Hab ich zu viel in C gedacht?

mfg bond

Java:
package Reaktionstester;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class MainFrame extends JFrame {
  private JPanel contentPane;
  private JButton button_red;
  private JButton button_green;
  private Timer timer1;
  private JPanel panel1;
  private int zaehler_false = 0;
  private int zaehler_verpasst = 0;
  private int zaehler_richtig = 0;
  private int zaehler_widh = 0;
  
  public MainFrame() {
    try {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      FrameInit();
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }

  /**
   * Component initialization.
   *
   * @throws java.lang.Exception
   */
  private void FrameInit() throws Exception {
    contentPane = (JPanel) getContentPane();
    contentPane.setLayout(new BorderLayout());
    setSize(new Dimension(400, 300));
    setTitle("Frame Title"); 

    
    panel1 = new JPanel();
    panel1.setLayout(new FlowLayout());
    panel1.setBackground(Color.RED);
    
    button_red = new JButton("red");
    button_red.setBackground(Color.RED);
    button_red.addActionListener(new ButtonRed_ActionListener());
    button_green = new JButton("green");
    button_green.setBackground(Color.GREEN);
    button_green.addActionListener(new ButtonGreen_ActionListener());
    
    panel1.add(button_red, BorderLayout.CENTER);
    panel1.add(button_green, BorderLayout.CENTER);
  
    contentPane.add(panel1, BorderLayout.CENTER);
    
    timer1 = new Timer(500, new timer1_ActionListener());
   
    timer1.start();
    
	while(timer1.isRunning() == true)
	{
		if(zaehler_widh == 20)
		{
			timer1.stop();
			System.out.println("Falsch:" + zaehler_false);
			System.out.println("Richtig:" + zaehler_richtig);
			System.out.println("Verpasst:" + zaehler_verpasst);
		}  
	}
  }
  
  private class ButtonRed_ActionListener implements ActionListener {
	 
	  public void actionPerformed(ActionEvent ae) {
	
		  if(panel1.getBackground() == Color.green)
		  {
			  zaehler_false++;
		  }
		  else
		  {
			  zaehler_richtig++;
		  }
		 
	  }
  }
  
  private class ButtonGreen_ActionListener implements ActionListener {
	  public void actionPerformed(ActionEvent ae) {
		  
		  if(panel1.getBackground() == Color.red)
		  {
			  zaehler_false++;
		  }
		  else
		  {
			  zaehler_richtig++;
		  }
		 
	  }
  }
  
  private class timer1_ActionListener implements ActionListener {
	  public void actionPerformed(ActionEvent ae) {
			
		
		  if(panel1.getBackground() == Color.GREEN)
		  {
			  panel1.setBackground(Color.RED);
		  }
		  else
		  {
			  panel1.setBackground(Color.GREEN);
		  }
		  zaehler_widh++;  
		} 
  }		
}
 
M

Marcinek

Gast
Das funktioniert nicht, weil diese While Anweisung den EDT blockiert und die anderen Ausführungen nicht zum zuge kommen.

Starte das in einem weiteren Thread.
 
M

mr bond007

Gast
Ok, danke!

Was ist hier mit Thread gemeint? Was hältst du von der lösung, die if in den timer_actionlistener reinzu machen?

Ich will ja auch die verpassten Drücke zählen. Aber wie kann ich eine variable hochzählen, wenn kein button gedrückt wird?

Soll ich das im timer_listener machen? Ich mein ich brauch irgendwas, das mir sagt, dass der button nicht gedrückt wurde.
 
M

mr bond1342

Gast
Ich hab gesucht nach einen Befehl, der eine boolean variable zurück gibt, falls der Button gedrückt, oder nicht gedrückt ist, aber habe leider nichts gefunden.

Gibt es denn so was ähnliches?
 
M

mr bond007

Gast
Aso ok danke.

Es gibt ja den Befehl event.getSource(), diesen wollte ich im timer listener einbauen, wenn der rückgabewert nicht den 2 Buttons enstpricht hochzählen, aber leider geht das nicht Listener übergreifend :/.

Ich stehe jetzt endgültig an, ich finde einfach nichts in den docs von oracle-java. Gibt es den irgendeinen ähnlichen Befehl, oder wie setzte ich die Aufgabe am besten um?
 
M

Marcinek

Gast
Ich verstehe die Frage nicht.

Du sollst doch eine Variable hochzählen ... Und du hast zwei Listener.. Wieso brauchst du da e.getSource()?
 
M

mr bond007

Gast
Brauche ich eh nicht, war nur eine schlechte Idee.

Ja ich will eine Variable hochzählen, wenn diese buttons nicht gedrückt werden. Das muss ich ja wohl im timer_actionlistener machen oder? Weil im button_listener wirds schlecht gehn.

Und ja ich wie könnte ich es denn machen?
 
M

Marcinek

Gast
Verstehe ich immernoch nicht.

Du hast drei Actionlistner, die auf verschiedene Sachen reagieren.

Wo ist das Problem hier richtig zu zählen?
 
M

mr bond007

Gast
Ich muss varialbe++ machen, wenn KEIN Button gedrückt wird.

Wenn KEIN Button gedrückt wird, dann werden die 2 Button_listener nicht aufgerufen. Der timer_actionlistener wird nur jede 500ms aufgerufen.

Und wie mach ich das jetzt? Wie kann ich überprüfen, ob ein bzw. kein Button gedrückt wurde?
 
M

Marcinek

Gast
Na wenn der Timer Listener zuschlägt ist die Zeit vorbei und man hat keinen knopf gedrückt.
 
M

mr bond007

Gast
Mh, das verstehe ich nciht ganz.

Wenn die 500ms vorbei sind, da könnte vorher, aber doch ein knopf gedrückt worden sein.

Darum wie weiß ich denn, wenn die 500ms vorbei sind, ob ich jetzt vorher einen Knopf gedrückt habe, oder nicht?
 
M

mr bond007

Gast
Danke, aber welche denn?

Ich finde einfach nichts in der doc von oracle.

Ich habs mit:
Java:
if(button_red.getAction() == null && button_red.getAction() == null)
		  {
			 zaehler_verpasst++;  
		  }

versucht, aber klappt auch nicht. Ich dachte wenn man keine Knopf drückt wird null zurückgegeben und dann halt zählen.
 
M

mr bond007

Gast
Oder meinst du das so?:

ich zähle einfach die knopfdrücke und dann ziehe ich diese von 20 hab = zaehler_verpasst.
 
M

mrbond007

Gast
Fertig, was sagt ihr dazu. Zum Code selber etc.?

Java:
package Reaktionstester;

import java.awt.*;
import javax.swing.*;

import java.awt.event.*;

public class MainFrame extends JFrame {
  private JPanel contentPane;
  private JButton button_red;
  private JButton button_green;
  private Timer timer_color_change;
  private JPanel panel1;
  private int counter_false = 0;
  private int counter_missed = 0;
  private int counter_right = 0;
  private int zaehler_widh = 0;
  
  public MainFrame() {
    try {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      FrameInit();
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }

  /**
   * Component initialization.
   *
   * @throws java.lang.Exception
   */
  private void FrameInit() throws Exception {
    contentPane = (JPanel) getContentPane();
    contentPane.setLayout(new BorderLayout());
    setSize(new Dimension(400, 300));
    setTitle("Frame Title"); 

    
    panel1 = new JPanel();
    panel1.setLayout(new FlowLayout());
    panel1.setBackground(Color.RED);
    
    Button_ActionListener bal = new Button_ActionListener();
    
    button_red = new JButton("red");
    button_red.setBackground(Color.RED);
    button_red.addActionListener(bal);
    button_green = new JButton("green");
    button_green.setBackground(Color.GREEN);
    button_green.addActionListener(bal);
    
    panel1.add(button_red, BorderLayout.CENTER);
    panel1.add(button_green, BorderLayout.CENTER);
  
    contentPane.add(panel1, BorderLayout.CENTER);
    
    timer_color_change = new Timer(500, new timer_color_change_ActionListener());
   
    timer_color_change.start();
  }
  
  private class Button_ActionListener implements ActionListener {
	 public void actionPerformed(ActionEvent ae) {
		 if(ae.getSource() == button_red)
		 {
			 if(panel1.getBackground() == Color.green)
		  	 {
				 counter_false++;
		  	 }
		  	 else
		  	 {
		  		 counter_right++;
		  	 }
			 button_green.setEnabled(false);
			 button_red.setEnabled(false);
		 }
		  
		 if(ae.getSource() == button_green)
		 {
			 if(panel1.getBackground() == Color.red)
		  	 {
				 counter_false++;
		  	 }
		  	 else
		  	 {
		  		 counter_right++;
		  	 }
			 button_red.setEnabled(false);
			 button_green.setEnabled(false);
		 }
	 }
  }
 
  
  private class timer_color_change_ActionListener implements ActionListener {
	public void actionPerformed(ActionEvent ae) {
		if(panel1.getBackground() == Color.GREEN)
		{
			panel1.setBackground(Color.RED);
		}
		else
		{
			panel1.setBackground(Color.GREEN);
		}
		zaehler_widh++;  
		  
		button_green.setEnabled(true);
		button_red.setEnabled(true);
		  
		if(button_red.getAction() == null && button_red.getAction() == null)
		{
			counter_missed++;  
		}
		  
		 
		if(zaehler_widh == 20)
		{
			timer_color_change.stop();
			counter_missed = 20 - (counter_false + counter_right);
			System.out.println("Falsch:" + counter_false);
			System.out.println("Richtig:" + counter_right);
			System.out.println("nicht gedrückt:" + counter_missed);
		} 
	} 
  }		
}
 
M

mr bond007

Gast
Bitte leute schaut doch mein Programm an. Ich möchte ja nur wissen wie es besser geht bzw. obs so passt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
N javax.swing.JOptionPane einbauen? Java Basics - Anfänger-Themen 9
? Konsolenprogramm hat Problem mit java.awt oder javax.swing Java Basics - Anfänger-Themen 7
A java.awt und javax.swing verschwunden Java Basics - Anfänger-Themen 2
E Wo bekomme ich das javax.swing.* package her? Java Basics - Anfänger-Themen 3
HolyFUT Javax Websocket API implementieren Java Basics - Anfänger-Themen 14
O Problem mit SOAP / javax.xml importieren Java Basics - Anfänger-Themen 7
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
pkm javax.script.ScriptException bei der ScriptEngine Java Basics - Anfänger-Themen 9
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
R Klassen Javax.vecmath.* Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T eclipse findet javax nicht Java Basics - Anfänger-Themen 4
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
timbeau Javax.Mail: Check this out Java Basics - Anfänger-Themen 10
c_sidi90 javax.exe beenden nach Programmende Java Basics - Anfänger-Themen 10
L javax.xml.transform.Source Java Basics - Anfänger-Themen 6
StrikeTom Javax.mail frage(zu code) Java Basics - Anfänger-Themen 17
D package javax.comm does not exist Java Basics - Anfänger-Themen 5
C javax.print.DocPrintJob Java Basics - Anfänger-Themen 17
G Fehler beim builden javax...... Java Basics - Anfänger-Themen 4
J Servlet Interface javax.servlet.Servlet Java Basics - Anfänger-Themen 2
G NoClassDefFoundError: javax/xml/stream/XMLStreamException Java Basics - Anfänger-Themen 23
A Finde javax.servlet.* nicht Java Basics - Anfänger-Themen 6
M Fehler: package javax.portlet does not exist Java Basics - Anfänger-Themen 2
V Serialisieren einer ShortMessage (javax.sound.midi) Java Basics - Anfänger-Themen 5
alexpetri javax.xml.stream.* nicht gefunden Java Basics - Anfänger-Themen 3
S import javax.image.io.*; funktioniert nicht Java Basics - Anfänger-Themen 28
L getDuration() von einem javax.media.player objekt problem. Java Basics - Anfänger-Themen 3
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
G import javax.servlet cannot be resolved Java Basics - Anfänger-Themen 1
N Probleme mit import von javax.servlet.* Java Basics - Anfänger-Themen 3
B Wo finde ich die Klasse javax.sound.sampled.AudioSystem Java Basics - Anfänger-Themen 7
R Javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
G wie bekomme ich das javax.jws.* package in den JBuilder ? Java Basics - Anfänger-Themen 7
J javax.comm-API kompilieren Java Basics - Anfänger-Themen 12
C wo ist mein javax.mail? Java Basics - Anfänger-Themen 2
L JavaMail: javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
F javax.imageio.ImageIO write methode Java Basics - Anfänger-Themen 11
B javax entpacken - aber wohin? Java Basics - Anfänger-Themen 2
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben