移动的圆

连山秀举 2009-09-24 08:55:13
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class TimerTest
{
public static void main(String [] args)
{
FillFrame frame = new FillFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

ActionListener listener = new TimePrinter();
Timer t = new Timer(3000,listener);
t.start();

}
}
class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
///这里该怎么写?
}
}

class FillFrame extends JFrame
{
public FillFrame()
{
setTitle("sun");
setSize(300, 200);
}
}

我想在public void actionPerformed()
中添加任务,使他画一个圆,且每隔3秒就向有移动一下,往复循环。
该怎么写呢?
...全文
207 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sforiz 2009-09-25
  • 打赏
  • 举报
回复
学习一下、、、
dichyzhu 2009-09-25
  • 打赏
  • 举报
回复
顶5楼
猿敲月下码 2009-09-25
  • 打赏
  • 举报
回复
package com.gui;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;

/** 来回弹球 */
public class BouncingCircle extends Applet implements Runnable {
int x = 150, y = 50, r = 50; // 圆的位置和半径

int dx = 11, dy = 7; // 半径的弧线

Thread animator; // 线程

volatile boolean pleaseStop; // 标记线程是否停止

/** 画个圆 */
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawOval(x - r, y - r, r * 2, r * 2);
}

/**
* 调用线程的动画。
*/
public void animate() {
// 如果碰到边缘了就反弹
Rectangle bounds = getBounds();
if ((x - r + dx < 0) || (x + r + dx > bounds.width))
dx = -dx;
if ((y - r + dy < 0) || (y + r + dy > bounds.height))
dy = -dy;

// 移动这个圆
x += dx;
y += dy;

repaint();
}

public void run() {
while (!pleaseStop) {
animate();
try {
// 没三秒移动一次
Thread.sleep(3000);
} catch (InterruptedException e) {
}
}
}

/** 线程开始 */
public void start() {
animator = new Thread(this);
pleaseStop = false;
animator.start();
}

/** 线程停止 */
public void stop() {
pleaseStop = true;
}
}
lz12366 2009-09-25
  • 打赏
  • 举报
回复
为了运行速度和尽量避免错误的话 就用线程吧!!
有很多这样的实例!!
像:绘画一个弹跳的小球
hardycheng 2009-09-25
  • 打赏
  • 举报
回复
感觉只用循环的话绝对不是最优的
时间长了就出错了
O爱咋咋地O 2009-09-25
  • 打赏
  • 举报
回复
用Timer 试试
hui94781674 2009-09-25
  • 打赏
  • 举报
回复
很强大的斧子
AldisZhan 2009-09-24
  • 打赏
  • 举报
回复
不过说过来 有很多Java书把线程放到后面 似乎不太合理 建议在看绘图之前先看
AldisZhan 2009-09-24
  • 打赏
  • 举报
回复
在意函数里 写个
while 循环不断的repaint() 而园的坐标不断也不断的变话
调用者函数试试
连山秀举 2009-09-24
  • 打赏
  • 举报
回复

我还没看到线程。。。能不能给个别的法
dajiadebeibei9 2009-09-24
  • 打赏
  • 举报
回复
用paint()方法画圆,方法里面让圆的x或者y左边移动几个像素 然后启动一个线程 里面的run()方法不断repaint(),这样很方便。你没必要添加监听器 多此一举

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧