怎么 消除JPanel上面的图形啊 我在JPanel上 画了一个图形我怎么实现删除这个图形的功能啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重载paint方法?就是搞个什么都没的 怎么画的怎么删。其实,删比画简单多啦。呵呵。最简单的办法,调用一下父类的绘制方法就搞定啦。super.paintComponent( g );如果不知怎么使用这句代码,或者用了没有效果。就把你绘制的代码贴出来,一定帮你搞定。呵呵。 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;} 我改成这样 jp.paint(g);可以了就是觉得 自己的办法很本戳你们帮我写一个 模拟自由落体运动的程序好吗 ??给我参考参考 嗯,我写了一下。供楼主参考: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像素吧,呵呵。} [接6楼]把代码拷过去之后,可以根据你机器的速度适当调一下interval的值。运行起来,可以清楚地看到小球下落得越来越快——这就是加速度的效果。可以把小球当成一个单独的类来写,但那样代码会多一些,理解的难度更大一些。就这样吧,绝对是正解。呵呵。 正如前面说的,删比画容易。可以将Panel的背景设置为white。设置一个标志,是否画的标志,若是画则按你原来的,否则把背景设置为white后,就退出paint()。 怎么修改应用程序图标? 如何用java生成一些有坐标属性的点 PreparedStatement的问题 简单问题 求保存用户名和IP地址到内存的方法(50) 边界Border设置大小和位置的问题 我的方案是否可行,大家给点建议吧!!! applet :class not found 错误请教 请高手解答!! log4j按天生成日志文件的问题 AGENT在继电保护中的应用 麻烦高手帮我把 jSave_ActionPerformed(ActionEvent e) {}功能实现!
就是搞个什么都没的
最简单的办法,调用一下父类的绘制方法就搞定啦。
super.paintComponent( g );如果不知怎么使用这句代码,或者用了没有效果。
就把你绘制的代码贴出来,一定帮你搞定。呵呵。
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;
}
jp.paint(g);可以了就是觉得 自己的办法很本戳你们帮我写一个 模拟自由落体运动的程序好吗 ??
给我参考参考
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像素吧,呵呵。
}
把代码拷过去之后,可以根据你机器的速度适当调一下interval的值。
运行起来,可以清楚地看到小球下落得越来越快——这就是加速度的效果。可以把小球当成一个单独的类来写,但那样代码会多一些,理解的难度更大一些。就这样吧,绝对是正解。呵呵。
设置一个标志,是否画的标志,若是画则按你原来的,否则把背景设置为white后,就退出paint()。