首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java 线程跟Applet

2012-12-15 
java 线程和Applet编写Applet程序,当鼠标单击小程序窗口区域的某一点,由该点的下方打上一光束,以单击点为

java 线程和Applet
编写Applet程序,当鼠标单击小程序窗口区域的某一点,由该点的下方打上一光束,以单击点为中心向四周呈同心圆散开,其效果类似放烟花,尽可能使制作的烟花更逼真。

求教啊
[最优解释]
这个不会是作业吧,我会被骂的


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import javax.swing.JApplet;

public class TApplet extends JApplet {

abstract class Action {
protected int clickX;
protected int clickY;
private boolean isFinish = false;
private Action nextAction;

public Action(int x, int y) {
clickX = x;
clickY = y;
}

public Action getNextAction() {
return nextAction;
}

public boolean isFinish() {
return isFinish;
}

public abstract void render(Graphics2D g);

protected void setFinish(boolean flag) {
isFinish = flag;
}

public void setNextAction(Action action) {
nextAction = action;
}

public abstract void update(long timeMillions);
}

class BeginAction extends Action {
private int beginX;
private int beginY;
private int currentX;
private int currentY;

public BeginAction(int x, int y) {
super(x, y);
beginX = currentX = x;
beginY = currentY = y + 300;
}

@Override
public void render(Graphics2D g) {
g.setColor(Color.red);
g.drawLine(beginX, beginY, currentX, currentY);
}

@Override
public void update(long timeMillions) {
if (!isFinish()) {
currentY -= 2;
if (currentY < clickY)
setFinish(true);
}
}
}

class DiffuseAction extends Action{
private int radius = 0;

public DiffuseAction(int x, int y) {
super(x, y);
}
@Override
public void render(Graphics2D g) {
g.setColor(Color.red);
g.drawRoundRect(clickX - radius / 2, clickY - radius / 2, radius, radius, radius, radius);
}

@Override
public void update(long timeMillions) {
radius += 2;
if(radius > 400)
setFinish(true);
}

}

private static final int HEIGHT = 600;
private static final int WIDTH = 600;

private Action currentAction;
private Thread currentThread;
private BufferedImage image;

@Override
public void init() {
super.init();
setSize(WIDTH, HEIGHT);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
final int x = e.getX();
final int y = e.getY();
if(currentThread != null)
currentThread.interrupt();
currentThread = new Thread() {


public void run() {
currentAction = new BeginAction(x, y);
currentAction.setNextAction(new DiffuseAction(x, y));
try {
while (true) {
Thread.sleep(30);
if(currentAction == null)
break;
if(!currentAction.isFinish())
currentAction
.update(System.currentTimeMillis());
else
currentAction = currentAction.getNextAction();
repaint();
}
} catch (InterruptedException e) {
}
}
};
currentThread.start();
}
});
}


public void paint(Graphics g){
super.paint(g);
if (currentAction != null)
currentAction.render((Graphics2D) g);
}

@Override
public void update(Graphics g) {
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
paint(g2);
g.drawImage(image, 0, 0, null);
}
}


[其他解释]
给你一个思路:
单击后,取得该点坐标,确定圆心位置,启动线程或定时器;
在相应的线程或定时器处理程序中,实现具体绘图功能。

定时改变圆的半径,画圆(应该只是上半部分的扇形),并填充
[其他解释]
在线等 求解啊
[其他解释]
。。。。。
[其他解释]
引用:
。。。。。

  按上述操作之后定义一个数组,数组为圆的半径,比如int [] a ={1,2,3,4,5,4,2,1,0}
然后根据数组,用线程启动,然后划圆,应该能达到那种效果
[其他解释]
引用:
给你一个思路:
单击后,取得该点坐标,确定圆心位置,启动线程或定时器;
在相应的线程或定时器处理程序中,实现具体绘图功能。

定时改变圆的半径,画圆(应该只是上半部分的扇形),并填充


按上述操作之后定义一个数组,数组为圆的半径,比如int [] a ={1,2,3,4,5,4,2,1,0}
然后根据数组,用线程启动,然后划圆,应该能达到那种效果 
  
[其他解释]
引用:
这个不会是作业吧,我会被骂的
Java code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485……


非常感谢!这个不是作业

热点排行