/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * SpelApplet.java * * Created on 2009-feb-17, 09:27:49 */ package mittforstaspel; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author karlssoj */ public class SpelApplet extends Applet implements Runnable, MouseListener { Boll b[]; //GLOBALA VARIABLER, SÄTT IN I BÖRJAN AV APPLET-KLASSEN Image dbImage; //deklarerar en Image variabel dit en osynlig kopia av applet-grafiken sparas Graphics dbg; //deklarerar Graphics variabel dit alla grafik-egenskaper för appleten sparas /** Initializes the applet appletKlass */ @Override public void init() { try { java.awt.EventQueue.invokeAndWait(new Runnable() { public void run() { //initComponents(); } }); } catch (Exception ex) { ex.printStackTrace(); } setBackground(Color.CYAN); ExecutorService tradgrupp = Executors.newFixedThreadPool(20); b = new Boll[20]; for(int i = 0; i < 10; i++) { b[i] = new Boll(tradgrupp, this); } tradgrupp.submit(this); addMouseListener(this); } //Denna metod anropas av repaint( @Override public void update (Graphics g) { //Initialiserar den osynliga kopian av grafiken if (dbImage == null) { //skapar en tom "image" med samma storlek som innevarande applet dbImage = createImage(this.getSize().width, this.getSize().height); //hämtar grafikegenskaper dbg = dbImage.getGraphics(); } //Tömmer skärmen i bakgrunden dbg.setColor (getBackground()); dbg.fillRect (0, 0, this.getSize().width, this.getSize().height); //Ritar grafiken pånytt i bakgrunden dbg.setColor(getForeground()); paint(dbg); //Ritar den uppdaterade bilden på bildskärmen g.drawImage(dbImage, 0, 0, this); } @Override public void paint(Graphics grafik) { //grafikfunktioner hit for(int i = 0; i < Boll.antal; i++) { if(b[i].stat.isCancelled() == false) { grafik.setColor(b[i].farg); grafik.fillOval(b[i].x, b[i].y, b[i].diameter, b[i].diameter); } } } public void run() { while(true) { try { repaint(); Thread.sleep(Boll.vanteTid); } catch (InterruptedException ex) { //Logger.getLogger(SpelApplet.class.getName()).log(Level.SEVERE, null, ex); } } } public int skillnad(int a, int b) { if(a > b) return a-b; else if(a < b) return b-a; else return a; } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { for(int i = 0; i < Boll.antal; i++) { if( (e.getPoint().x - b[i].x) <= b[i].diameter && (e.getPoint().y - b[i].y) <= b[i].diameter) { if( (e.getPoint().x - b[i].x) >= 0 && (e.getPoint().y - b[i].y) >= 0) { b[i].stat.cancel(true); } } } } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } /** This method is called from within the init() method to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ /* @SuppressWarnings("unchecked") // private void initComponents() { org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 300, Short.MAX_VALUE) ); }// */ // Variables declaration - do not modify // End of variables declaration } class Boll implements Runnable { int x, y, diameter, xrikt, yrikt; static int vanteTid, antal = 0; Future stat; Color farg; Applet applet; Random generator = new Random(); public Boll(ExecutorService tr, Applet a) { antal++; xrikt = generator.nextInt(8) - 4; yrikt = generator.nextInt(8) - 4; applet = a; vanteTid = 10; diameter = 50; x = generator.nextInt(a.getWidth() - diameter); y = generator.nextInt(a.getWidth() - diameter); farg = new Color(generator.nextInt(256),generator.nextInt(256),generator.nextInt(256)); stat = tr.submit(this); } public void move() { if(x >= applet.getWidth() - diameter || x < 0) xrikt*=-1; if(y >= applet.getHeight() - diameter || y < 0) yrikt*=-1; x+=xrikt; y+=yrikt; } public void run() { while(true) { move(); try { Thread.sleep(vanteTid); } catch (InterruptedException ex) { //Logger.getLogger(Boll.class.getName()).log(Level.SEVERE, null, ex); break; } } } }