本來在看nio,做了個聊天程序,覺得挺好玩,本來準備做完善了,結果公司要整理項目,只好花了一兩天做了一個整理jsp的工具。
今天,有朋友要做抽獎程序,我一時興起,不自量力的要試試看。后來一想自己做的程序向來是以丑陋聞名,朋友那邊又是急用,還是覺得沒自信啦。。。呵呵。
不過看了一下動畫處理,關于去閃爍的機制,做了一個基類來用,屏蔽了線程/雙緩沖和update這些技術:
效果:http://www.aygfsteel.com/Files/black_zerg/picker.rar
代碼:


package com.shen.picker.common;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;


public abstract class AnimationPanel extends JPanel
{
Dimension offDimension;
Image offImage;
Graphics offGraphics;
int delay = 1000;
Thread th;
boolean needRun;

/** *//**
* 開始動畫
* @param delay
* 延遲
*/

public void start(int delay)
{
setDelay(delay);
start();
}

public void start()
{
if (th == null)
th = new Timer();
needRun = true;
th.start();
}

public void stop()
{
needRun = false;
}

public void paint(Graphics g)
{
update(g);
}

public void update(Graphics g)
{
Dimension d = size();
if ((offGraphics == null) || (d.width != offDimension.width)

|| (d.height != offDimension.height))
{
offDimension = d;
offImage = createImage(d.width, d.height);
offGraphics = offImage.getGraphics();
}
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, d.width, d.height);
offGraphics.setColor(Color.black);
paintFrame(offGraphics);
g.drawImage(offImage, 0, 0, null);
}
public abstract void paintFrame(Graphics g);
public abstract void inThread();

public void setDelay(int delay)
{
this.delay = delay;
}


class Timer extends Thread
{

public void run()
{

while (needRun)
{
inThread();

try
{
Thread.sleep(delay);

} catch (InterruptedException e)
{
}
repaint();
}
}
}
}

今天,有朋友要做抽獎程序,我一時興起,不自量力的要試試看。后來一想自己做的程序向來是以丑陋聞名,朋友那邊又是急用,還是覺得沒自信啦。。。呵呵。
不過看了一下動畫處理,關于去閃爍的機制,做了一個基類來用,屏蔽了線程/雙緩沖和update這些技術:
效果:http://www.aygfsteel.com/Files/black_zerg/picker.rar
代碼:


































































































