pitäisi saada tehtyä ohjelmaan ajastin, joka kerran sekunnissa suorittaa esim kohdan jbutton1_clicked.
delphissä ja vb:ssä on se lomakkeelle raahattava ajastin, jolla homman hoitaa. netbeansissä ei vastaavaa ole. eli saako siihen jostain sellaisen, tai löytyiskö yksinkertainen esimerkki, miten timer:llä tai timertask:lla homma hoituisi?
olen aivan aloittelija javan kanssa ja en siitä kovin paljoa tajua (vielä)!
delphissä ja vb:ssä on se lomakkeelle raahattava ajastin, jolla homman hoitaa. netbeansissä ei vastaavaa ole. eli saako siihen jostain sellaisen, tai löytyiskö yksinkertainen esimerkki, miten timer:llä tai timertask:lla homma hoituisi?
olen aivan aloittelija javan kanssa ja en siitä kovin paljoa tajua (vielä)!
Vastaukset 4
Vanhimmat
Paa sinne koodiin ikuinen luuppi tyyliin näin (en oo sit tarkistanu syntaksia):
while (true){
Thread.sleep(1000);
...ja tähän se mitä tehdään...
}
Että sillai.
kiitokset esimerkistä. jbuilderilla sain sen toimimaan. sillä sain myös sen timerin toimimaan, vaikken netbeansilla tällaisen esimerkin pohjalta:
http://www.cs.helsinki.fi/u/vihavain/k03/Java/CoreJavaVolIICh1/TimerTestjava.html
taitaa olla joku juttu netbeansissa, mitä en ole ihan ymmärtänyt kun saan sillä erroria errorin perään :)
Kokeilin TimerTestiä Netbeansilla. Siinä koodissa oli kaksi saman nimistä luokkaa. Tämä pitäisi pelata.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import javax.swing.Timer;
/**
This class shows a frame with several clocks that
are updated by a timer thread.
*/
public class TimerTest
{
public static void main (String [] args)
{
TimerTestFrame frame = new TimerTestFrame ();
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.show ();
}
}
/**
The frame holding the clocks.
*/
class TimerTestFrame extends JFrame
{
public TimerTestFrame ()
{
setTitle ("TimerTest");
setSize (WIDTH, HEIGHT);
Container c = getContentPane ();
c.setLayout (new GridLayout (2, 3));
c.add (new TimerTesti ("America/Los_Angeles"));
c.add (new TimerTesti ("America/New_York"));
c.add (new TimerTesti ("America/Caracas"));
c.add (new TimerTesti ("Europe/Rome"));
c.add (new TimerTesti ("Africa/Cairo"));
c.add (new TimerTesti ("Asia/Taipei"));
}
public static final int WIDTH = 450;
public static final int HEIGHT = 300;
}
/**
The canvas to display a clock that is updated by a timer.
*/
class TimerTesti extends JPanel
{
/**
Constructs a clock canvas.
@param tz the time zone string
*/
public TimerTesti (String tz)
{
zone = tz;
calendar = new GregorianCalendar (TimeZone.getTimeZone (tz));
Timer t = new Timer (1000, new
ActionListener ()
{
public void actionPerformed (ActionEvent event)
{
calendar.setTime (new Date ());
repaint ();
}
});
t.start ();
setSize (WIDTH, HEIGHT);
}
public void paintComponent (Graphics g)
{
super.paintComponent (g);
g.drawOval (0, 0, 100, 100);
int seconds = calendar.get (Calendar.HOUR) * 60 * 60
calendar.get (Calendar.MINUTE) * 60
calendar.get (Calendar.SECOND);
double hourAngle = 2 * Math.PI
* (seconds - 3 * 60 * 60) / (12 * 60 * 60);
double minuteAngle = 2 * Math.PI
* (seconds - 15 * 60) / (60 * 60);
double secondAngle = 2 * Math.PI
* (seconds - 15) / 60;
g.drawLine (50, 50, 50 (int)(30
* Math.cos (hourAngle)),
50 (int)(30 * Math.sin (hourAngle)));
g.drawLine (50, 50, 50 (int)(40
* Math.cos (minuteAngle)),
50 (int)(40 * Math.sin (minuteAngle)));
g.drawLine (50, 50, 50 (int)(45
* Math.cos (secondAngle)),
50 (int)(45 * Math.sin (secondAngle)));
g.drawString (zone, 0, 115);
}
private String zone;
private GregorianCalendar calendar;
public static final int WIDTH = 125;
public static final int HEIGHT = 125;
}
Toimiihan tuo tietysti ilma netbeansiakin. Talleta tiedosto nimellä TimerTest.java, käännä se komennolla javac TimerTest.java ja aja se komennolla java TimerTest .
Ihan hauskat kellot.