怎么 消除JPanel上面的图形啊

热烈的红颜 2008-10-27 12:47:31
我在JPanel上 画了一个图形
我怎么实现删除这个图形的功能啊
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
热烈的红颜 2008-10-29
  • 打赏
  • 举报
回复
好的哈 谢谢大家了 结贴了
ace62 2008-10-28
  • 打赏
  • 举报
回复
正如前面说的,删比画容易。可以将Panel的背景设置为white。
设置一个标志,是否画的标志,若是画则按你原来的,否则把背景设置为white后,就退出paint()。
yami251139 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 accp206 的回复:]
[接6楼]
把代码拷过去之后,可以根据你机器的速度适当调一下interval的值。
运行起来,可以清楚地看到小球下落得越来越快——这就是加速度的效果。

可以把小球当成一个单独的类来写,但那样代码会多一些,理解的难度更大一些。就这样吧,绝对是正解。呵呵。
[/Quote]
ls的几点下班啊,8点就能上来晃荡了呀
好羡慕哦
睡觉了。。
showde123 2008-10-28
  • 打赏
  • 举报
回复
6楼的正解


LZ 可以加几个控制按钮 控制 开始/结束/暂停

最好用多线程 实现 多个物体下落
accp206 2008-10-27
  • 打赏
  • 举报
回复
[接6楼]
把代码拷过去之后,可以根据你机器的速度适当调一下interval的值。
运行起来,可以清楚地看到小球下落得越来越快——这就是加速度的效果。

可以把小球当成一个单独的类来写,但那样代码会多一些,理解的难度更大一些。就这样吧,绝对是正解。呵呵。
accp206 2008-10-27
  • 打赏
  • 举报
回复
嗯,我写了一下。供楼主参考:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BallPanel extends JPanel {

public static void main(String[] args) {
JFrame frame = new JFrame("自由落体模拟");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new BallPanel());
frame.setSize(300, 600);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public BallPanel() {
timer = new Timer( interval, new ActionListener(){
public void actionPerformed(ActionEvent e) {
moveBall();
}
});
timer.start();
}

private void moveBall() {
speed += g * interval / 1000 ;
y += speed;
if( y >= getHeight() - r )
{
y = getHeight() - r;
timer.stop();
}
repaint();
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(ballColor);
g.fillOval(x, y, r, r);
}

private Color ballColor = Color.red; //小球颜色
private int x = 100, y; //小球初坐标
private int r = 20; //小球半径
private double speed = 0; //速度

private int interval = 50; //间隔时间:50毫秒
private Timer timer; //计时器

static final double g = 9.8; //重力加速度:9.8米/秒,姑且每米算1像素吧,呵呵。
}
热烈的红颜 2008-10-27
  • 打赏
  • 举报
回复
我改成这样
jp.paint(g);可以了

就是觉得 自己的办法很本戳

你们帮我写一个 模拟自由落体运动的程序好吗 ??
给我参考参考
热烈的红颜 2008-10-27
  • 打赏
  • 举报
回复
模拟 自由落体运动
热烈的红颜 2008-10-27
  • 打赏
  • 举报
回复
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test4 extends JFrame{

@Override
public void paint(Graphics arg0) {
// TODO Auto-generated method stub
new Move_1(jpanel_1).start();
}
/**
* @param args
*/
public Test4(){
jpanel_1 = new JPanel();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(jpanel_1);
this.setSize(500,500);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test4();
}
class Move_1 extends Thread{
Graphics g ;
final int A_O_G=10;
int panelHeight;
JPanel jp;
public Move_1(JPanel jp)
{
this.jp = jp;
this.panelHeight= jp.getSize().height;
g = jp.getGraphics();
g.drawOval(0, 0, 20, 20);
}
public void run(){
double realY;
float time=0.0f;
while(true){
try {
/*
* 休眠0.5秒 就是 让每隔0.5秒 改变一次位置
* */
this.sleep(500);
time +=0.1f;
realY=A_O_G*Math.sqrt(time)/2;
//消除以前绘制的图形

g.drawOval(0, (int)(A_O_G*time), 20, 20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
JPanel jpanel_1;
}
accp206 2008-10-27
  • 打赏
  • 举报
回复
怎么画的怎么删。

其实,删比画简单多啦。呵呵。
最简单的办法,调用一下父类的绘制方法就搞定啦。
super.paintComponent( g );

如果不知怎么使用这句代码,或者用了没有效果。
就把你绘制的代码贴出来,一定帮你搞定。呵呵。
yami251139 2008-10-27
  • 打赏
  • 举报
回复
重载paint方法?
就是搞个什么都没的。。。

62,615

社区成员

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

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