ajastin

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ä)!
4448
Äänestä

Muut lukivat myös

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.

Äänestä

  • toimii.. kirjoitti:

    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;
    }

    Äänestä

  • Mendelsson kirjoitti:

    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.

    Äänestä

Kommentoi aloitusta


netbeans kirjoitti:

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ä)!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu