Avatar billede stefmeister Nybegynder
16. september 2004 - 09:02 Der er 3 kommentarer og
1 løsning

Program blinker

Hej

Jeg har lavet et analogur, det eneste problem er bare at det hele tiden står og blinker som en gal. Kan man skrive noget kode eller lign. så den holder op med det?

--------- min kode --------------

import java.awt.*;
import java.applet.*;
import java.io.*;
import java.util.*;
import java.math.*;

public class analogur extends Applet
{
  int sx1, sy1, mx1, my1;
  double sx, sy, mx, my, sekunter, minutter;
  long sek, min;
  Date tid, tid2;

public void paint(Graphics g) {

tid = new Date();

      g.setColor(Color.white);
      g.fillRect(0, 0, 200, 200);
      g.setColor(Color.black);
      g.drawOval(10, 10, 100, 100);
      g.drawLine(60, 5, 60, 20);
      g.drawLine(60, 100, 60, 115);
      g.drawLine(5, 60, 20, 60);
      g.drawLine(100, 60, 115, 60);
      g.fillOval(55, 55, 10, 10);
      g.drawString("3",115,65);
      g.drawString("6",57,125);
      g.drawString("9",0,65);
      g.drawString("12",55,10);


    sekunter = tid.getTime();
    sek = (long) (sekunter / 1000);
    System.out.println(sek);

    g.setColor(Color.green);
    sx = 60 + 50 * Math.cos( (sek * 6 * Math.PI) / 180 - (Math.PI / 2));
    sx1 = (int) sx;
    sy = 60 + 50 * Math.sin( (sek * 6 * Math.PI) / 180 - (Math.PI / 2));
    sy1 = (int) sy;
    g.fillOval(sx1 - 5, sy1 - 5, 10, 10);


    sekunter = tid.getTime();
    sek = (long) (sekunter / 60000);
    System.out.println(sek);

    g.setColor(Color.blue);
    sx = 60 + 50 * Math.cos( (sek * 6 * Math.PI) / 180 - (Math.PI / 2));
    sx1 = (int) sx;
    sy = 60 + 50 * Math.sin( (sek * 6 * Math.PI) / 180 - (Math.PI / 2));
    sy1 = (int) sy;
    g.fillOval(sx1 - 5, sy1 - 5, 10, 10);


    sekunter = tid.getTime();
    sek = (long) (sekunter / 3600000);
    System.out.println(sek);

    g.setColor(Color.red);
    sx = 60 + 50 * Math.cos( (sek * 15 * Math.PI) / 180 + (Math.PI/2) - (((Math.PI)/2))/3);
    sx1 = (int) sx;
    sy = 60 + 50 * Math.sin( (sek * 15 * Math.PI) / 180 + (Math.PI/2) - (((Math.PI)/2))/3);
    sy1 = (int) sy;
    g.fillOval(sx1 - 5, sy1 - 5, 10, 10);

    repaint(1000);
    }


  }
Avatar billede Slettet bruger
16. september 2004 - 10:14 #1
Du skal sørge for at bruge doublebuffering (altså tegne dit grafik til et Image-object som du derefter tegner til Applet'en. Desuden er det ikke helt fin kode at bruge repaint()-metoden i implementeringen af paint(Graphics)-metoden, brug istedet en ekstern tråd som sørger for at repainte din applet hvert sekund (hvert 1000. ms).
Avatar billede Slettet bruger
16. september 2004 - 10:16 #2
Her er et eksempel på hvordan du implementerer Double buffering, såfremt du ikke har erfaring med dette:

http://www.realapplets.com/tutorial/DoubleBuffering.html
Avatar billede stefmeister Nybegynder
16. september 2004 - 17:20 #3
tak... kigger på det senere, men ser ud til at virke.

Drop et svar.
Avatar billede stefmeister Nybegynder
15. oktober 2004 - 19:29 #4
nå jeg lukker det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester