Timer - HILFE

Toastbot

Mitglied
Nachdem ich gestern den ganzen Tag versucht habe einen passenden Timer zu entwickeln und einfach alles fehl geschlagen ist, wollte ich hier wieder um Rat und Hilfe bitten!

Ich versuche einen Timer zu machen der jede Sekunde einen Wert um 1 erhöt.
Und außerdem soll dieser Wert wenn er 10 erreicht wieder auf 0 gesetzt werden.
Es sollte möglichs eine Int sein, damit ich dann an anderen stellen meines skripts sagen kann: jede 3te von 10 Sekunden passiert das und das.
Nur um sicher zu gehen ist hier mein komplettes Skript, liebe Grüße und schonmal vielen dank!
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Toastbrot {


	public Toastbrot(){
		final JFrame frame = new JFrame("Toastbrot");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationByPlatform(true);
		JPanel panel = new KreisPanel();
		frame.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == 100 ) {
					mund = 3;
				} else if (e.getKeyCode() == 99 ) {
					mund = 2;
				} else if (e.getKeyCode() == 98 ) {
					mund = 1;
				} else if (e.getKeyCode() == 97 ) {
					mund = 0;
				} else if (e.getKeyCode() == 101 ) {
					auge = 0;
					guck = 0;
				} else if (e.getKeyCode() == 102 ) {
					auge = 1;
					guck = 0;
				} else if (e.getKeyCode() == 103 ) {
					guck = 1;
					auge = 2;
				} else if (e.getKeyCode() == 104 ) {
					auto = 0;
				} else if (e.getKeyCode() == 105 ) {
					auto = 1;
				}
				frame.repaint();
			}
		});
		frame.add(panel);

		frame.pack();
		frame.setVisible(true);
	}
	int mund = 0;
	int auge = 0;
	int guck = 0;
	int auto = 0;

	public static void main(String[] args) { 
		new Toastbrot(); 
	} 

	class KreisPanel extends JPanel implements ActionListener  {
		private static final long serialVersionUID = 1L;

		public Dimension getPreferredSize() {
			return new Dimension(500, 500);
		}

		public void paintComponent(Graphics g) {

			Graphics2D g2d = (Graphics2D) g;
			g2d.setColor(new Color( Integer.parseInt( "339933", 16 ) ));
			g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

			//Toast
			int mx = 120;
			int my = 170;
			int mr = 85;
			int Rx = 100;
			int Ry = 150;
			int Rw = 250;
			int Rh = 300;
			int ox = 245;
			int oy = 85;
			int or = 170;
			//Augen
			int ax = 150;
			int ay = 200;
			int ab = 50;
			int ah = 150;
			int bx = 250;
			int by = 200;
			int bb = 50;
			int bh = 150;
			//Mund
			int nx = 150;
			int ny = 360;
			int nh = 50;
			int nb = 150;
			int qx = 150;
			int qy = 390;
			int qh = 5;
			int qb = 150;
			int vx = 250;
			int vy = 390;
			int vh = 25;
			int vb = 25;

			//ToastDunkel
			g2d.setColor(new Color( Integer.parseInt( "FF9900", 16 ) ));       
			g2d.fillRect(Rx, Ry, Rw, Rh);
			g2d.fillOval(ox, oy, or, or);
			g2d.fillOval(mx-mr, my-mr, 2*mr, 2*mr);

			//ToastHell
			g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
			g2d.fillRect(Rx+10, Ry+10, Rw-20, Rh-20);
			g2d.fillOval(ox+10, oy+10, or-20, or-20);
			g2d.fillOval(mx-mr+10, my-mr+10, 2*mr-20, 2*mr-20);

			//AugenWeiß
			g2d.setColor(new Color( Integer.parseInt( "FFFFFF", 16 ) ) );
			g2d.fillOval(ax, ay, ab, ah);
			g2d.fillOval(bx, by, bb, bh);

			//"Lebendes" Toastbrot
			if (auto==1) {

				for(int i=0; i<=10; i=i+1){
					if (i==0) {
						g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
						g2d.fillOval(ax, ay, ab, ah);
						g2d.fillOval(bx, by, bb, bh);
						g2d.setColor(new Color( Integer.parseInt( "FF9900", 16 ) ));
						g2d.fillRect(ax, ay+100, ab, 5);	
						g2d.fillRect(bx, by+100, bb, 5);
					} else {
						g2d.setColor(new Color( Integer.parseInt( "FFFFFF", 16 ) ) );
						g2d.fillOval(ax, ay, ab, ah);
						g2d.fillOval(bx, by, bb, bh);
					}
				}

			}

			//AugenZu
			if (guck==0) {
				g2d.setColor(new Color( Integer.parseInt( "FFFFFF", 16 ) ) );
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
			} else if (guck==1) {
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color( Integer.parseInt( "FF9900", 16 ) ));
				g2d.fillRect(ax, ay+100, ab, 5);	
				g2d.fillRect(bx, by+100, bb, 5);
			}

			//AugenSchwarz
			if (auge==0) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(ax+10, ay+50, ab-15, ah-65);
				g2d.fillOval(bx+10, by+50, bb-15, bh-65);      
			} else if (auge==1) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(ax+5, ay+50, ab-15, ah-65);
				g2d.fillOval(bx+5, by+50, bb-15, bh-65);      
			}else if (auge==2) {
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color( Integer.parseInt( "FF9900", 16 ) ));
				g2d.fillRect(ax, ay+100, ab, 5);
				g2d.fillRect(bx, by+100, bb, 5);
			}
			//Mund
			if (mund==1) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(nx, ny-5, nb, nh);
			}
			else if (mund==0) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(nx, ny+5, nb, nh);
			}
			else if (mund==2) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillRect(qx, qy, qb, qh);
			}
			else if (mund==3) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(vx, vy, vb, vh);
			}
		}

		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub

		}
	}
}
Wobei Zeile 128-145 der Bereich ist, den ich später so umschreibe das hier sachen im Sekundentackt passieren, ich also hier auf die int sekunde zugreifen möchte (der If befehl kommt dann natürlich raus)
 

BRoll

Bekanntes Mitglied
Wie wärs mit utils.Timer?
Mit dem kannste das ganz einfach machen:
Java:
Timer timer=new Timer();
timer.schedule(new TimerLoop(),0,1000);


private class TimerLoop extends TimerTask{

run()
{
   //diese methode wird jede Sekunde jetzt aufgerufen
}

}
 

Flown

Administrator
Mitarbeiter
So nachdem ich mit deinem Code vertraut bin, muss ich dir sagen du SOLLST Konstanten verwenden bei den KeyEvents. Vielleicht sollte der Code so aussehen, wenn du einen swing Timer verwendest und deinen Actionlistener schon implementierst:

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Toastbrot {

	public Toastbrot() {
		frame = new JFrame("Toastbrot");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationByPlatform(true);
		KreisPanel panel = new KreisPanel();
		frame.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_NUMPAD4) {
					mund = 3;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD3) {
					mund = 2;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD2) {
					mund = 1;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD1) {
					mund = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD5) {
					auge = 0;
					guck = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD6) {
					auge = 1;
					guck = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD7) {
					guck = 1;
					auge = 2;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD8) {
					auto = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD9) {
					auto = 1;
				}
				frame.repaint();
			}
		});
		frame.add(panel);
		
		Timer look = new Timer(1000, panel);
		look.setRepeats(true);
		look.start();

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

	int mund = 0;
	int auge = 0;
	int guck = 0;
	int auto = 0;
	private JFrame frame;

	public static void main(String[] args) {
		new Toastbrot();
	}

	class KreisPanel extends JPanel implements ActionListener {
		private static final long serialVersionUID = 1L;
		
		private int counter;
		
		public KreisPanel() {
			super();
			counter = 0;
		}
		
		public Dimension getPreferredSize() {
			return new Dimension(500, 500);
		}

		public void paintComponent(Graphics g) {

			Graphics2D g2d = (Graphics2D) g;
			g2d.setColor(new Color(Integer.parseInt("339933", 16)));
			g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

			// Toast
			int mx = 120;
			int my = 170;
			int mr = 85;
			int Rx = 100;
			int Ry = 150;
			int Rw = 250;
			int Rh = 300;
			int ox = 245;
			int oy = 85;
			int or = 170;
			// Augen
			int ax = 150;
			int ay = 200;
			int ab = 50;
			int ah = 150;
			int bx = 250;
			int by = 200;
			int bb = 50;
			int bh = 150;
			// Mund
			int nx = 150;
			int ny = 360;
			int nh = 50;
			int nb = 150;
			int qx = 150;
			int qy = 390;
			int qh = 5;
			int qb = 150;
			int vx = 250;
			int vy = 390;
			int vh = 25;
			int vb = 25;

			// ToastDunkel
			g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
			g2d.fillRect(Rx, Ry, Rw, Rh);
			g2d.fillOval(ox, oy, or, or);
			g2d.fillOval(mx - mr, my - mr, 2 * mr, 2 * mr);

			// ToastHell
			g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
			g2d.fillRect(Rx + 10, Ry + 10, Rw - 20, Rh - 20);
			g2d.fillOval(ox + 10, oy + 10, or - 20, or - 20);
			g2d.fillOval(mx - mr + 10, my - mr + 10, 2 * mr - 20, 2 * mr - 20);

			// AugenWeiß
			g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
			g2d.fillOval(ax, ay, ab, ah);
			g2d.fillOval(bx, by, bb, bh);

			// "Lebendes" Toastbrot
			if (auto == 1) {

				for (int i = 0; i <= 10; i = i + 1) {
					if (i == 0) {
						g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
						g2d.fillOval(ax, ay, ab, ah);
						g2d.fillOval(bx, by, bb, bh);
						g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
						g2d.fillRect(ax, ay + 100, ab, 5);
						g2d.fillRect(bx, by + 100, bb, 5);
					} else {
						g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
						g2d.fillOval(ax, ay, ab, ah);
						g2d.fillOval(bx, by, bb, bh);
					}
				}

			}

			// AugenZu
			if (guck == 0) {
				g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
			} else if (guck == 1) {
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
				g2d.fillRect(ax, ay + 100, ab, 5);
				g2d.fillRect(bx, by + 100, bb, 5);
			}

			// AugenSchwarz
			if (auge == 0) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(ax + 10, ay + 50, ab - 15, ah - 65);
				g2d.fillOval(bx + 10, by + 50, bb - 15, bh - 65);
			} else if (auge == 1) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(ax + 5, ay + 50, ab - 15, ah - 65);
				g2d.fillOval(bx + 5, by + 50, bb - 15, bh - 65);
			} else if (auge == 2) {
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
				g2d.fillRect(ax, ay + 100, ab, 5);
				g2d.fillRect(bx, by + 100, bb, 5);
			}
			// Mund
			if (mund == 1) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(nx, ny - 5, nb, nh);
			} else if (mund == 0) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(nx, ny + 5, nb, nh);
			} else if (mund == 2) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillRect(qx, qy, qb, qh);
			} else if (mund == 3) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(vx, vy, vb, vh);
			}
		}

		public void actionPerformed(ActionEvent e) {
			setState(counter);
			counter = (counter % 10) + 1;
		}
		
		private void setState(int i) {
			if(i %2 == 1) {
				auge = 0;
				mund = 0;
			}
			else {
				auge = 1;
				mund = 0;
			}
			repaint();
		}
	}
}
 

Toastbot

Mitglied
Erst mal danke, das ist der erste Timer der auch vom Programm als "nicht defekt" anerkannt wird.
Nur ich >Java Neuling< wiedermal keine Ahnung wie ich denn nun den Timer dazu nutzen kann kontinuierlich einen Wert zu erhöhen.
Ich hab mir dann den von dir eingefügten "counter" geschnappt um zu schauen ob der sich vielleicht regelmäßig verändert, aber die Ausgabe ist kontinuierlich 0.

Ich weis du hast mir schon echt viel jetzt unter die Arme gegriffen, und ich versuch schon so viel wie möglich alleine ^^, aber magst du mir trotzdem noch versuchen dieses letzte bisschen zu erklären? :)

Vielen Dank für alles bis jetzt und liebe Grüße!
 

Flown

Administrator
Mitarbeiter
Ein Timer ist ein eigenläufiger Thread, der unabhänig von deinem Hauptprogramm Sachen verrichtet. Es gibt jetzt zwei Unterschiedliche Timer die du nutzen kannst.

Einmal der Swing Timer:
Der Timer wird gestartet und wartet die angegebene Verzögerung und danach löst er ein ActionEvent in einem ActionListener aus. Das kann einmal oder auch kontinuierlich geschehen.

Dann gibt es den Util Timer:
Dieser Timer behilft sich eines TimerTask, der dazu gescheduled werden muss. Das heißt, je nachdem welche Methode du bedienst (in meinem KSKB ist es mit Verzögerung und Periode), wird jedes mal nach einer gewissen Periode dieser TimerTask ausgeführt.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TimerTask;

public class Timers {
	
	public static void main(String[] args) {
		new Timers();
	}
	
	public Timers() {
		// Erste Möglichkeit einen Timer zu starten
		CounterListener cl = new CounterListener();
		// Erster Parameter die Verzögerung in ms, der zweite Parameter
		// ist der ActionListener der ausgelöst wird, wenn der Timer abgelaufen ist
		javax.swing.Timer t = new javax.swing.Timer(1000, cl);
		// Damit das kontinuierlich geschieht bis er gestoppt wird
		t.setRepeats(true);
		// Starten des Timers
		t.start();
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		t.stop();
		
		
		//Zweite Möglichkeit ist es einen Timer und einen TimerTask zu verwenden
		java.util.Timer t2 = new java.util.Timer();
		CounterTask ct = new CounterTask();
		// Erster Parameter ist der Timertask, zweiter ist die Verzögerung bis zum starten (also 0),
		// letzer Parameter ist die Periode
		t2.schedule(ct, 0, 1000);
		
		try {
			Thread.sleep(9000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		t2.cancel();
	}
	
	class CounterListener implements ActionListener {
		
		private int counter;
		
		public CounterListener() {
			counter = 0;
		}
		
		public int getCounter() {
			return counter;
		}
		
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("Timer with ActionListener: " + counter++);
		}
	}
	
	class CounterTask extends TimerTask {
		
		private int counter;
		
		public CounterTask() {
			super();
			counter = 0;
		}
		
		public int getCounter() {
			return counter;
		}
		
		public void run() {
			System.out.println("Timer with TimerTask: " + counter ++);
		};
	}

}
 
Zuletzt bearbeitet:

Toastbot

Mitglied
Ok, bevor ich ein Nerfenzusammenbruch bekomme nerve ich lieber das nette Forum nochmal ...
Ich habe jetzt einen der Timer ausgewählt, und es geschaft das dieser in meinem Hauptscript ankommt.
(Ich kann diesen mit System.out.println(zahl) anzeigen lassen)
Aber irgendwas mache ich anscheinend immernoch falsch, denn sage ich nun if (zahl == 5) {...} dann passiert einfach NICHTS. Die Konsole gibt mir 1...2...3...4...5...6...7 ect. aus, aber sie tut nichts bei 5!!!
Und zweitens bekomme ich es auch nicht hin das der Timer wieder restartet wenn er 10 erreicht. Er endet dann einfach und daran kann ich auch nichts ändern >_<

Ich wollte jetzt ganz einfach gesagt den Timer im extrascript immer wieder von 1 bis 10 zählen lassen, diesen wert in meinem Hauptscript einlesen, und so weit weiter verwenden das bei einer bestimmten Zeit (z.B. 5) etwas passiert, aber egal wie lange ich hin und her probiere ES GELINGT MIR NICHT Q_Q

HILFE!

Timer Script:
Java:
package Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Timers {

	public static void main(String[] args) {
		new Timers();
	}

	public Timers() {
		CounterListener cl = new CounterListener();
		javax.swing.Timer t = new javax.swing.Timer(1000, cl);
		t.setRepeats(true);
		t.start();
		try {
			Thread.sleep(11000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	  	t.stop();
	}

	class CounterListener implements ActionListener {

		private int counter;

		public CounterListener() {
			counter = 0;
		}

		public int getCounter() {
			return counter;
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			counter++;
			zahla=counter;
			System.out.println(zahla);
		}

	}
	static int zahla;
	public static int getCounter() {
		return zahla;
	}
}
Main Script
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

import Timer.Timers;

public class Toasttimer {

	public Toasttimer() {
		frame = new JFrame("Toastbrot");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationByPlatform(true);
		KreisPanel panel = new KreisPanel();
		frame.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_NUMPAD4) {
					mund = 3;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD3) {
					mund = 2;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD2) {
					mund = 1;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD1) {
					mund = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD5) {
					auge = 0;
					guck = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD6) {
					auge = 1;
					guck = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD7) {
					guck = 1;
					auge = 2;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD8) {
					auto = 0;
				} else if (e.getKeyCode() == KeyEvent.VK_NUMPAD9) {
					auto = 1;
				}
				frame.repaint();
			}
		});
		frame.add(panel);
	}

	static int zahl;
	int mund = 0;
	int auge = 0;
	int guck = 0;
	int auto = 1;
	int rep = zahl;
	private JFrame frame;

	public static void main(String[] args) {
		new Toastbrot();
		new Timers();
		zahl = Timer.Timers.getCounter();
		System.out.println(zahl);
	}

	class KreisPanel extends JPanel  {
		private static final long serialVersionUID = 1L;

		public Dimension getPreferredSize() {
			return new Dimension(500, 500);
		}

		public void paintComponent(Graphics g) {

			Graphics2D g2d = (Graphics2D) g;
			g2d.setColor(new Color(Integer.parseInt("339933", 16)));
			g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

			// Toast
			int mx = 120;
			int my = 170;
			int mr = 85;
			int Rx = 100;
			int Ry = 150;
			int Rw = 250;
			int Rh = 300;
			int ox = 245;
			int oy = 85;
			int or = 170;
			// Augen
			int ax = 150;
			int ay = 200;
			int ab = 50;
			int ah = 150;
			int bx = 250;
			int by = 200;
			int bb = 50;
			int bh = 150;
			// Mund
			int nx = 150;
			int ny = 360;
			int nh = 50;
			int nb = 150;
			int qx = 150;
			int qy = 390;
			int qh = 5;
			int qb = 150;
			int vx = 250;
			int vy = 390;
			int vh = 25;
			int vb = 25;

			// ToastDunkel
			g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
			g2d.fillRect(Rx, Ry, Rw, Rh);
			g2d.fillOval(ox, oy, or, or);
			g2d.fillOval(mx - mr, my - mr, 2 * mr, 2 * mr);

			// ToastHell
			g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
			g2d.fillRect(Rx + 10, Ry + 10, Rw - 20, Rh - 20);
			g2d.fillOval(ox + 10, oy + 10, or - 20, or - 20);
			g2d.fillOval(mx - mr + 10, my - mr + 10, 2 * mr - 20, 2 * mr - 20);

			// AugenWeiß
			g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
			g2d.fillOval(ax, ay, ab, ah);
			g2d.fillOval(bx, by, bb, bh);

			// "Lebendes" Toastbrot
			if (rep == 5) {
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
				g2d.fillRect(ax, ay + 100, ab, 5);
				g2d.fillRect(bx, by + 100, bb, 5);
				System.out.println("Jetzt");
			} else {
				g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
			}
			// AugenZu
			if (guck == 0) {
				g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
			} else if (guck == 1) {
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
				g2d.fillRect(ax, ay + 100, ab, 5);
				g2d.fillRect(bx, by + 100, bb, 5);
			}

			// AugenSchwarz
			if (auge == 0) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(ax + 10, ay + 50, ab - 15, ah - 65);
				g2d.fillOval(bx + 10, by + 50, bb - 15, bh - 65);
			} else if (auge == 1) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(ax + 5, ay + 50, ab - 15, ah - 65);
				g2d.fillOval(bx + 5, by + 50, bb - 15, bh - 65);
			} else if (auge == 2) {
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(ax, ay, ab, ah);
				g2d.fillOval(bx, by, bb, bh);
				g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
				g2d.fillRect(ax, ay + 100, ab, 5);
				g2d.fillRect(bx, by + 100, bb, 5);
			}
			// Mund
			if (mund == 0) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(nx, ny - 5, nb, nh);
			} else if (mund == 1) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
				g2d.fillOval(nx, ny + 5, nb, nh);
			} else if (mund == 2) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillRect(qx, qy, qb, qh);
			} else if (mund == 3) {
				g2d.setColor(new Color(Integer.parseInt("000000", 16)));
				g2d.fillOval(vx, vy, vb, vh);
			}
		}
	}
}

Falls es noch jemanden gibt der sich jetzt wahrscheinlich denkt "man ist der blöd" - dann bitte hilf mir! ;( ;( ;(
 

Flown

Administrator
Mitarbeiter
Ich habe dir oben ein Bsp geliefert das mit den Augen links und rechts wackelt. Warum verwendest du es nicht weiter?

Dein Programm funktioniert nicht weil dein Hauptthread nichts von dem Zähler mitbekommt. Das ist so wie wenn ich China ein Rad umfällt und du davon nichts mitbekommst.

Jedes mal, wenn der Timer tickt (also deinen Counter inkrementiert wird), musst du natürlich den Hauptthread benachrichtigen! In meinem obigen Bsp läuft das so, dass jedes mal actionperformed aufgerufen wird!

Also nachdem die Lösung deines Problems oben schon gepostet ist, mache ich mir nicht noch mehr mühe dies näher zu erläutern.
 
Zuletzt bearbeitet:

Toastbot

Mitglied
Mein Problem bei der Version von dir ist, das ich mit den % Angaben nichts anfangen kann, ich hab einfach gesagt keine Ahnung was die bedeuten.
Java:
        public void actionPerformed(ActionEvent e) {
            setState(counter);
            counter = (counter % 10) + 1;
        }
        
        private void setState(int i) {
            if(i %2 == 1) {
                auge = 0;
            }
            else {
                auge = 1;
            }
            repaint();
        }

Wenn du mir hier verrätst was es mit dem "i %2 == 1" auf sich hat oder mit dem "counter % 10" dann könnte ich den Befehl weiter nutzen, aber mit meinem bisherigem Wissen kann ich damit nichts anfangen.
Und ich möchte ungerne teile in meinem Skript beinhalten die ich nicht verstehe.
 

Flown

Administrator
Mitarbeiter
Es ist die modulo Operation für Java. Aber wenn du es nicht weißt warum fragst du google nicht darum?

Es gibt dir den Divisionsrest zurück. Ich würde dir dringendst raten dich mal mit Javagrundlagen zu beschäftigen!

also:
Java:
counter = (counter % 10) + 1;

bedeutet dass der counter von 0 - 10 läuft. Bsp: wenn der Counter gerade 3 ist dann ergibt die Rechnung 3 % 10 -> 3. Wenn der counter 11 wäre dann würde es 11 % 1 -> 1 ergeben. Kann man alles auf Google, Wikipedia, etc. nachlesen.

Das heißt dann für die if-Abfrage:

Java:
i %2 == 1

1 % 2 -> 1 oder 2 % 2 -> 0 ==> insgesamt bedeutet es bei ungeraden Zahlen wird
Code:
auge=0;
gesetzt und bei geraden Zahlen umgekehrt!

Hoffe es ist jetzt alles klar!
 

Toastbot

Mitglied
1000 Dank für die Hilfe!
Ich hab es verstanden, es funktioniert, ich bin happy :D
Hier für die die Interessent haben noch das end script :D
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
 

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Toastbrot {
    int time;
 
    public Toastbrot() {
        frame = new JFrame("Toastbrot");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);
        KreisPanel panel = new KreisPanel();
        frame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_NUMPAD4) {
                    mund = 3;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD3) {
                    mund = 2;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD2) {
                    mund = 1;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD1) {
                    mund = 0;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD5) {
                    auge = 0;
                    guck = 0;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD6) {
                    auge = 1;
                    guck = 0;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD7) {
                    guck = 1;
                    auge = 2;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD8) {
                    auto = 0;
                } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD9) {
                    auto = 1;
                }
                frame.repaint();
            }
        });
        frame.add(panel);
        
        Timer look = new Timer(700, panel);
        look.setRepeats(true);
        look.start();
 
        frame.pack();
        frame.setVisible(true);
    }
 
    int mund = 0;
    int auge = 0;
    int guck = 0;
    int auto = 0;
    private JFrame frame;
 
    public static void main(String[] args) {
        new Toastbrot();
    }
 
    class KreisPanel extends JPanel implements ActionListener {
        private static final long serialVersionUID = 1L;
        
        private int counter;
        
        public KreisPanel() {
            super();
            counter = 0;
        }
        
        public Dimension getPreferredSize() {
            return new Dimension(500, 500);
        }
 
        public void paintComponent(Graphics g) {
 
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(new Color(Integer.parseInt("339933", 16)));
            g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
 
            // Toast
            int mx = 120;
            int my = 170;
            int mr = 85;
            int Rx = 100;
            int Ry = 150;
            int Rw = 250;
            int Rh = 300;
            int ox = 245;
            int oy = 85;
            int or = 170;
            // Augen
            int ax = 150;
            int ay = 200;
            int ab = 50;
            int ah = 150;
            int bx = 250;
            int by = 200;
            int bb = 50;
            int bh = 150;
            // Mund
            int nx = 150;
            int ny = 360;
            int nh = 50;
            int nb = 150;
            int qx = 150;
            int qy = 390;
            int qh = 5;
            int qb = 150;
            int vx = 250;
            int vy = 390;
            int vh = 25;
            int vb = 25;
 
            // ToastDunkel
            g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
            g2d.fillRect(Rx, Ry, Rw, Rh);
            g2d.fillOval(ox, oy, or, or);
            g2d.fillOval(mx - mr, my - mr, 2 * mr, 2 * mr);
 
            // ToastHell
            g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
            g2d.fillRect(Rx + 10, Ry + 10, Rw - 20, Rh - 20);
            g2d.fillOval(ox + 10, oy + 10, or - 20, or - 20);
            g2d.fillOval(mx - mr + 10, my - mr + 10, 2 * mr - 20, 2 * mr - 20);
 
            // AugenWeiß
            g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
            g2d.fillOval(ax, ay, ab, ah);
            g2d.fillOval(bx, by, bb, bh);
 
            // "Lebendes" Toastbrot
            if (auto == 1) {
 
                for (int i = 0; i <= 10; i = i + 1) {
                    if (i == 0) {
                        g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
                        g2d.fillOval(ax, ay, ab, ah);
                        g2d.fillOval(bx, by, bb, bh);
                        g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
                        g2d.fillRect(ax, ay + 100, ab, 5);
                        g2d.fillRect(bx, by + 100, bb, 5);
                    } else {
                        g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
                        g2d.fillOval(ax, ay, ab, ah);
                        g2d.fillOval(bx, by, bb, bh);
                    }
                }
 
            }
 
            // AugenZu
            if (guck == 0) {
                g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
                g2d.fillOval(ax, ay, ab, ah);
                g2d.fillOval(bx, by, bb, bh);
            } else if (guck == 1) {
                g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
                g2d.fillOval(ax, ay, ab, ah);
                g2d.fillOval(bx, by, bb, bh);
                g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
                g2d.fillRect(ax, ay + 100, ab, 5);
                g2d.fillRect(bx, by + 100, bb, 5);
            }
 
            // AugenSchwarz
            if (auge == 0) {
                g2d.setColor(new Color(Integer.parseInt("000000", 16)));
                g2d.fillOval(ax + 10, ay + 50, ab - 15, ah - 65);
                g2d.fillOval(bx + 10, by + 50, bb - 15, bh - 65);
            } else if (auge == 1) {
                g2d.setColor(new Color(Integer.parseInt("000000", 16)));
                g2d.fillOval(ax + 5, ay + 50, ab - 15, ah - 65);
                g2d.fillOval(bx + 5, by + 50, bb - 15, bh - 65);
            } else if (auge == 2) {
                g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
                g2d.fillOval(ax, ay, ab, ah);
                g2d.fillOval(bx, by, bb, bh);
                g2d.setColor(new Color(Integer.parseInt("FF9900", 16)));
                g2d.fillRect(ax, ay + 100, ab, 5);
                g2d.fillRect(bx, by + 100, bb, 5);
            }
            // Mund
            if (mund == 0) {
                g2d.setColor(new Color(Integer.parseInt("000000", 16)));
                g2d.fillOval(nx, ny, nb, nh);
                g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
                g2d.fillOval(nx, ny - 5, nb, nh);
            } else if (mund == 1) {
                g2d.setColor(new Color(Integer.parseInt("000000", 16)));
                g2d.fillOval(nx, ny, nb, nh);
                g2d.setColor(new Color(Integer.parseInt("FFCC66", 16)));
                g2d.fillOval(nx, ny + 5, nb, nh);
            } else if (mund == 2) {
                g2d.setColor(new Color(Integer.parseInt("000000", 16)));
                g2d.fillRect(qx, qy, qb, qh);
            } else if (mund == 3) {
                g2d.setColor(new Color(Integer.parseInt("000000", 16)));
                g2d.fillOval(vx, vy, vb, vh);
            }
        }
 
        public void actionPerformed(ActionEvent e) {
            setState(counter);
            counter = (counter % 10) + 1;
        }
 
        private void setState(int i) {
            if(i %2 == 1) {
                auge = 0;
                guck = 0;
                time+=1;
                System.out.println("Zeit"+time);
            }
            else {
                auge = 1;
                guck = 0;
                time+=1;
                System.out.println("Zeit"+time);
            }
            if(time == 3){
            	auge=2;
            	guck=1;
            }
            if(time == 9){
            	time=0;
            	mund=(int)(Math.random()*4);
            	System.out.println("Diese Zahl"+mund);
            }
            repaint();
        }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
C Timer aktualisieren Java Basics - Anfänger-Themen 5
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
missy72 Timer oder Timeline Java Basics - Anfänger-Themen 3
R Timer Format: 00:00:00 Java Basics - Anfänger-Themen 29
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
D Änder der Timer Speeds Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
L Methoden Timer Java Basics - Anfänger-Themen 9
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
S Timer reseten Java Basics - Anfänger-Themen 3
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
CptK Methoden Timer & Mathematischer Denkfehler Java Basics - Anfänger-Themen 7
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
D Timer programmieren Java Basics - Anfänger-Themen 13
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
E Timer erstellen Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
S actionlistener timer Java Basics - Anfänger-Themen 9
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
S timer mit imagedatei Java Basics - Anfänger-Themen 5
S timer Java Basics - Anfänger-Themen 0
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
KaffeeFan Timer beenden Java Basics - Anfänger-Themen 12
K Ampelsteuerung mit Timer Java Basics - Anfänger-Themen 8
F Array und Timer Java Basics - Anfänger-Themen 2
G Timer einsetzen Java Basics - Anfänger-Themen 2
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Schneller Timer Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
B Timer beenden? Java Basics - Anfänger-Themen 0
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
O Delayed Timer erstellen Java Basics - Anfänger-Themen 3
M Timer / Thread Java Basics - Anfänger-Themen 43
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
J Swing Timer Java Basics - Anfänger-Themen 3
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
C Methoden Einen Timer einbauen, aber wie? Java Basics - Anfänger-Themen 5
B Timer Java Basics - Anfänger-Themen 25
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
S Erste Schritte Java Timer Java Basics - Anfänger-Themen 13
E Threads Timer Java Basics - Anfänger-Themen 6
Spin KI Anfänger Frage : Timer Problem Java Basics - Anfänger-Themen 6
F Prüfen ob timer läuft Java Basics - Anfänger-Themen 6
L Erste Schritte Timer und Zugriffsattribute Java Basics - Anfänger-Themen 5
M Audio + Timer Java Basics - Anfänger-Themen 12
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
R Klassen MemorySpiel: brauche Timer Java Basics - Anfänger-Themen 3
D Timer in Applet Java Basics - Anfänger-Themen 2
ruerob Warum ist Timer schneller als While? Java Basics - Anfänger-Themen 9
F Java Timer Frage Java Basics - Anfänger-Themen 14
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
B Timer Java Basics - Anfänger-Themen 2
S timer task problem Java Basics - Anfänger-Themen 2
C Überprüfen, ob Timer läuft Java Basics - Anfänger-Themen 3
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
W Timer erstellen Java Basics - Anfänger-Themen 2
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
M Timer unterbrechen? Wo ist mein Thread? Java Basics - Anfänger-Themen 2
L Timer innerhalb eines Threads Java Basics - Anfänger-Themen 3
P Java Timer Java Basics - Anfänger-Themen 2
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
B problem mit timer/timertask, Farbverlauf Java Basics - Anfänger-Themen 10
Piwi Timer bei Programmende beenden Java Basics - Anfänger-Themen 25
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C Regelmäßigen Timer bei Zeitüberschreitung nacheinander abarbeiten Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
H Timer Java Basics - Anfänger-Themen 3
dl85hej Zeitsitschleife anstatt Timer Java Basics - Anfänger-Themen 5
G Klasse mit Timer nicht beenden Java Basics - Anfänger-Themen 6
S Timer / TimerTask Frage Java Basics - Anfänger-Themen 8
S Timer bzw. TimerTask Frage Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben