1 Minute warten

  • Themenstarter Themenstarter Franke
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
F

Franke

Gast
hi leutz,
hab mir ne kleine Uhr gebastelt.. besser gesagt bin noch dabei.
jetzt wollt ich fragen ob wer weiss wie man das hinbekommen kann das
eine Methode genau jede Minute aufgerufen wird(Minutenzeiger)
gibts da was?? man kann ja nicht die ganze zeit die zeit abfragen!!

danke schon mal 😉
 
coole sache.. danke dir !!!!
ist das auch genau ne minute??
oder soll ich doch lieber die uhr alle stunde oder so neu stellen?!?
wenns ziemlich genau iss reicht das nämlich vollkommen, dann stell ich immer nur beim starten des Programms.
das läuft halt mind. immer 8h!!
 
ja..60000ms sind genau eine Minute.

sonst ist vielleicht

Calendar.get(MINUTE) passender....der Calendar hat die genaue Zeit und im 10 Sekunden takt neu abfragen oder so

EDIT:
also die Uhr nicht vom "Code" abhängig machen, sonder die Uhr nach der Systemzeit stellen (in einem Intervall immer wieder neu Stellen)
 
Wenn die Uhr auf die Minute genau gehen soll, dann würde ich sie halbsekündig aktualisieren lassen. Aber wichtig ist, wie mein Vorredner schon sagte, dass du immer die Systemzeit abfragst, nichts dazu addieren oder so.
 
Alternativ könntest Du auch mit einem Timer einen TimerTask alle Minute aufrufen und weitermachen lassen.
 
Ich halte ein Calendar-Objekt für die geeignetere Lösung. Es ist hier auch kein Problem sehr kleine Intervalle abzufragen und auch die Sekunden mit auszugeben.
 
habs jetzt mal mit dem Calendar probiert.
ich habe jetzt noch ein kleines prob und ich hoffe da kann mir auch noch einer helfen.

habe die uhr soweit fertig, klappt auch alles sehr gut. Jetzt will ich die Uhr in mein bestehendes Prog einbinden
und hab ein kleines prob.
In meinem Programm leg ich immer alles auf verschiedene JPanels, aber da ich die Klasse MyClock von
JPanel abgeleitet habe kann ich das jetzt nicht adden!!!
kann mir einer nen rat geben wie ich das machen kann?? BITTE!!!
evtl aus dieser Klasse was machen das ich auf ein JPanel adden kann?!?!

die Uhr ist lauffähig falls da auch mal einer reinschaun will 😉


Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Calendar;

public class MyClock extends JPanel
{
	static int ind, sec, min, hour;
	
	@Override
	protected void paintComponent( Graphics g )
	{
		g.setColor(new Color(255,255,255));
		PolygonWithEgdes.drawNeck( g, getWidth() / 2, getHeight() / 2, 300, 60, false, sec);
	}
	
	public static void main( String[] args )
	{
		JFrame f = new JFrame();
		f.setBackground(new Color(9,112,162));
		f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		f.setSize( 140, 120 );		
		f.setResizable(true);	
			
		sec = 0;
		for(ind=sec; ind>=0; ind++)
		{
			f.add( new MyClock() );

			// hier wird eine halbe Sekunden gewartet damit man auch sicher jede sekunde bekommt!!
			try
			{
				Thread.sleep(500); // 60000 sind eine Minute				
			}
			catch(Exception exc)
			{
				System.out.println("exc");
			}
			
			if(sec > 45)
				sec = Calendar.getInstance().get( Calendar.SECOND 		) -45 ;		
			if(sec <= 45 || sec > 15)
				sec = Calendar.getInstance().get( Calendar.SECOND 		) -15;	
			if(sec < 0)
				sec = Calendar.getInstance().get( Calendar.SECOND		) +45;
										
			// hier wird nach einer Umrundung der Index wieder auf 0 gestellt
			if(ind==60)
				ind = 0;
				
			f.setVisible( true );
		} 
	}
}
class PolygonWithEgdes
{
	static int min, min_anz, hour, hour_anz;
	//private static Polygon p = new Polygon();
	
	public static synchronized void drawNeck( Graphics g, int x, int y, int r, int n, boolean filled, int sec)
	{
		// p.reset();
		// Jetzt caste ich das Graphics objekt in ein 2D Objekt. Grund-> Strichbreite, Kantenglättung usw. möglich
		Graphics2D g2D = (Graphics2D) g;
		g2D.clearRect(0,0,140,120);
		g2D.setRenderingHint( 	RenderingHints.KEY_ANTIALIASING,
                         		RenderingHints.VALUE_ANTIALIAS_ON);

		for ( int i = 0; i <= n; i++ )
		{
			
			// zeichnet punktweise den Kreis --> erst mal drin lassen
			// p.addPoint( 	(int) (x + r * Math.cos( i * 2 * Math.PI / n )),
			//				(int) (y + r * Math.sin( i * 2 * Math.PI / n )) );

			// zeichnet die Linie bei jedem Punkt und verbindet diesen mit dem Mittelpunkt 
			
			if(i%1 == 0 && filled != true && i == sec) 
			{
				// Stil für Zeiger festlegen
				BasicStroke stil_sec = new 	BasicStroke(1.0f, 
											BasicStroke.CAP_BUTT,
											BasicStroke.JOIN_ROUND);
				BasicStroke stil_min = new 	BasicStroke(2.0f, 
											BasicStroke.CAP_BUTT,
											BasicStroke.JOIN_ROUND);
				BasicStroke stil_hour = new BasicStroke(3.0f, 
											BasicStroke.CAP_BUTT,
											BasicStroke.JOIN_ROUND);
											
				// Sekunde holen und zeichnen
				g2D.setStroke(stil_sec);
				g2D.drawLine( 	x,
								y,
								(int) (x + 30 * Math.cos( i * 2 * Math.PI / n )),
								(int) (y + 30 * Math.sin( i * 2 * Math.PI / n )));
				
				// Minute holen und zeichnen
				g2D.setStroke(stil_min);
				min	 = Calendar.getInstance().get( Calendar.MINUTE 		);
				if(min > 45)
					min_anz = min-45 ;	
				if(min <= 45 || min > 15)
					min_anz = min-15;
				if(min < 0)
					min_anz = min+45;					
				g2D.drawLine( 	x,
								y,
								(int) (x + 30 * Math.cos( min_anz * 2 * Math.PI / n )),
								(int) (y + 30 * Math.sin( min_anz * 2 * Math.PI / n )));
							
				// Stunde holen und zeichnen
				g2D.setStroke(stil_hour);
				hour = Calendar.getInstance().get( Calendar.HOUR		);				
				if(hour >= 3 && hour <=12)
					hour_anz = hour*5-15;	
				if(hour < 3)
					hour_anz = hour*5+45;	
				g2D.drawLine( 	x,
								y,
								(int) (x + 25 * Math.cos(hour_anz  * 2 * Math.PI / n )),
								(int) (y + 25 * Math.sin(hour_anz  * 2 * Math.PI / n )));
				
			}
		}

		//if ( filled )
		//	g2D.fillPolygon( p );
		//else
		//	g2D.drawPolygon( p );   
	}
}
 
wieso kannst du MyClock nicht adden (Fehlermeldung, Fehlverhalten, ..)?
 
kein Fehlverhalten.. es passiert einfach nix 🙁
kann man eigentlich ein JPanel auf ein JPanel legen?
am besten wär es aus dieser klasse was zu machen das ich auf ein JPanel adden kann..
das prog war mal ein sechseck, und den grundaufbau habe ich übernommen, 60 ecken daraus gemacht und
dann war es nimmer so wild die uhr rein zu pfriemeln 😉
ich denke das mein prob das ist das MyClock ein JPanel ist und deswegen wird das nicht gehen...
ODER?!?!?!

und joe meinst du damit das ich das so abändern soll???
 
Ich hab' mal dran rumgefrickelt. Schau's Dir an. Die Sekunden passen noch nicht, da fehlt meiner Ansicht nach, 'ne if-Bedingung, aber das darfst Du selber auskaspern 😎
Das Ganze habe ich auf die Schnelle gemacht. An der einen oder anderen Ecke kann man bestimmt noch was verbessern.

Die Uhr:

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

public class MyClock extends JPanel {

	private static final long	serialVersionUID	= 1L;
	static int	sec, min, hour;
	static MyClock clock;

	@Override
	protected void paintComponent(Graphics g) {
		g.fillRect(100, 100, 50, 50);
		PolygonWithEgdes.drawNeck(g, getWidth() / 2, getHeight() / 2, 300, 60,
				false);
	}

	public static void main(String[] args) {
		clock = new MyClock();
		
		JFrame f = new JFrame();
		f.setBackground(new Color(9, 112, 162));
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(140, 120);
		f.setResizable(true);
    f.getContentPane().add(clock);
    f.setVisible(true);
    
    clock.timeOn();
    
	}
	
	public MyClock(){

	}
	
	private void timeOn(){

		while(true) {


			// hier wird eine halbe Sekunden gewartet damit man auch sicher jede sekunde bekommt!!
			try {
				Thread.sleep(1000); // 60000 sind eine Minute            
			} catch (Exception exc) {
				System.out.println("exc");
			}
			
			repaint();
			
		}
	}
}

Das Polygon:

Code:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.Calendar;

class PolygonWithEgdes {
	static int	min, min_anz, hour, hour_anz;

	//private static Polygon p = new Polygon();

	public synchronized static void drawNeck(Graphics g, int x, int y, int r,
			int n, boolean filled) {
		// p.reset();
		// Jetzt caste ich das Graphics objekt in ein 2D Objekt. Grund-> Strichbreite, Kantenglättung usw. möglich
		g.setColor(Color.red);
		Graphics2D g2D = (Graphics2D) g;
		g2D.clearRect(0, 0, 140, 120);
		g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);


    int sec = getSecond();

		
		for (int i = 0; i <= n; i++) {

			// zeichnet punktweise den Kreis --> erst mal drin lassen
			// p.addPoint(    (int) (x + r * Math.cos( i * 2 * Math.PI / n )),
			//            (int) (y + r * Math.sin( i * 2 * Math.PI / n )) );

			// zeichnet die Linie bei jedem Punkt und verbindet diesen mit dem Mittelpunkt

			if (i % 1 == 0 && filled != true && i == sec) {
				// Stil für Zeiger festlegen
				BasicStroke stil_sec = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
						BasicStroke.JOIN_ROUND);
				BasicStroke stil_min = new BasicStroke(2.0f, BasicStroke.CAP_BUTT,
						BasicStroke.JOIN_ROUND);
				BasicStroke stil_hour = new BasicStroke(3.0f, BasicStroke.CAP_BUTT,
						BasicStroke.JOIN_ROUND);

				// Sekunde holen und zeichnen
				g2D.setStroke(stil_sec);
				g2D.drawLine(x, y, (int) (x + 30 * Math.cos(i * 2 * Math.PI / n)),
						(int) (y + 30 * Math.sin(i * 2 * Math.PI / n)));

				// Minute holen und zeichnen
				g2D.setStroke(stil_min);
				min = Calendar.getInstance().get(Calendar.MINUTE);
				if (min > 45)
					min_anz = min - 45;
				if (min <= 45 || min > 15)
					min_anz = min - 15;
				if (min < 0)
					min_anz = min + 45;
				g2D.drawLine(x, y,
						(int) (x + 30 * Math.cos(min_anz * 2 * Math.PI / n)),
						(int) (y + 30 * Math.sin(min_anz * 2 * Math.PI / n)));

				// Stunde holen und zeichnen
				g2D.setStroke(stil_hour);
				hour = Calendar.getInstance().get(Calendar.HOUR);
				if (hour >= 3 && hour <= 12)
					hour_anz = hour * 5 - 15;
				if (hour < 3)
					hour_anz = hour * 5 + 45;
				
				g2D.drawLine(x, y,
						(int) (x + 25 * Math.cos(hour_anz * 2 * Math.PI / n)),
						(int) (y + 25 * Math.sin(hour_anz * 2 * Math.PI / n)));

			}
		}
	}
	
	private static int getSecond(){
		
		int sec = Calendar.getInstance().get(Calendar.SECOND);

		if (sec > 45)
			return (sec-45);
		if (sec <= 45 || sec > 15)
			return (sec-15);
		if (sec < 0)
			return (sec+45);
		  
		return 0;
	}
}

Damit sollt dann auch Deine Frage abgedeckt sein, wie Du die Uhr woanders rein kriegst. :wink:
 
erst mal vielen dank für eure mühe..
hab es immer noch nicht geschafft die uhr in mein prog einzubinden 🙁

mein prob besteht darin das ich beim aufruf gar net in die main komme!!!

bis jetzt habe ich beim progn in die main eigentlich nur reingeschrieben

new Klassenname(); <-- hier wird praktisch nur der Konstruktor aufgerufen

so wars nie ein prob was aufzurufen weil nichts in der main stand, nur im konstruktor.
also hab in die main ein println gemacht das nicht ausgegeben wird beim aufruf, aber das im konstruktor schon
also ist es das ganz sicher.
ich mach jetzt schon ewig rum aber bring es nicht zusammen,
mein prog ist von einem JFrame abgeleitet auf dem JPanel liegen..

MyClock clock = new MyClock();
.
und wenn ich sage
.
jp_fuss.add(clock);
.
gibt er mir keine Fehlermeldung und nichts.. und das println vom konstruktor wird ausgegeben!!

eigentlich soll die klasse ja dann keine main mehr haben und alles was dort passiert soll bei mir in dem
prog geschehen.. aber ich bekomms einfach net hin!!!

hoffe ihr habt net die schnautze voll 😉
das mit dem neu zeichnen ist auf jeden fall die bessere lösung..
und das mit dem sekundenzeiger hab ich auch gemacht falls es wen interessiert.. hier

Code:
	private static int getSecond()
	{ 
		int sec = Calendar.getInstance().get(Calendar.SECOND); 
		int merk = sec;

		if(sec > 45) 
			sec = merk-45 ;       
		if(sec <= 45 || sec > 15) 
			sec = merk-15;    
		if(sec < 0) 
			sec = merk+45; 

		return sec; 
	}
 
des rätsels lösung 😉

der hintergrund meines programms in das ich adden wollte ist weiss an dieser stelle..
da ich die zeiger weiss hatte und den hintergrund blau ist folgendes geschehen!!
die farbe der zeiger ist angezeigt worden, nur die hintergrundfarbe wurde nicht gesetzt da ich net in die main gekommen bin!!
also weisses panel auf weissem panel mit weissen zeigern!!!!
lol..
und es war deswegen weiss(na ja leicht gräulich) weil ich mit clearRect() etwas über die uhr gelegt habe
(ging davor ja net anderst) damit wenn ich sie neu zeichne nicht die alten zeiger usw. noch angezeigt werden.

vielen vielen dank @ joe und ganz besonderst an quaxli

das war ne schwere geburt!!!

der code falls es wen interessiert kommt auch


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

public class MyClock extends JPanel 
{ 

   private static final long   serialVersionUID   = 1L; 
   static int   sec, min, hour; 
   static MyClock clock;

   @Override 
   protected void paintComponent(Graphics g) 
   { 
		g.fillRect(100, 100, 50, 50); 
		PolygonWithEgdes.drawNeck(	g, getWidth() / 2, getHeight() / 2, 300, 60, false); 
   } 
    
   public MyClock()
   {
   } 
}

das ist jetzt dieklasse myClock..
und so wird es in meinem Prog aufgerufen..
wichtig!! geht nur ganz zum schluss.. also so
Code:
....
setResizable(false);
setVisible(true);
    	
getClock();


public void getClock()
{
	clock.setBounds(0,0,140,120);
	clock.setVisible(true);
	while(ende == false)
	{
		jp_fuss.add(clock); 
		timeOn();
	}
}

sieht dank quaxli jetzt auch noch übersichtlich aus 😉
thxxxxxxxxx a lot!!!!
 
Sorry aber ich weiss net wie des geht..
warscheinlich eh nur wenn man angemeldet ist!!
normal bin ich auch als MScalli angemeldet, aber irgendwie kann ich mich z.z. net anmelden..
also von daheim aus gehts.. ganz komisch 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben