无法使用repaint()?
//I want to paint a ball in a animation
//I can't seem to find a way to repaint the ball
// Any help or tips on how to use repaint here?
//
// Ball class
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Ball implements Runnable {
protected Point loc;
protected int dx;
protected int dy;
protected Color color;
protected boolean flag;
private Graphics gra;
public Ball(Point loc,int dx,int dy,Graphics st)
{
this.loc=loc;
this.dx=1;
this.dy=1;
color=Color.blue;
this.gra=st;
flag=false;
}
public void paint(Graphics g)
{
g.fillOval((int)this.loc.getX(),(int)this.loc.getY(),20,20);
}
public void move()
{
this.loc.translate(this.dx,this.dy);
}
@Override
public void run() {
while(flag==false)
{
this.paint(gra);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
move();
}
}
}
//Myframe class
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class myframe extends JFrame {
private Ball b;
public myframe()
{
super("My Frame");
setSize(800,600);
}
public void run()
{
b=new Ball(new Point(100,100),10,10,getGraphics());
b.run();
}
}
//Main class
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame
{
/**
* @param args
*/
public static void main(String[] args) {
myframe jwin = new myframe();
jwin.setSize(600, 600);
jwin.setVisible(true);
jwin.run();
}
}
//I want to paint a ball in a animation
//I can't seem to find a way to repaint the ball
// Any help or tips on how to use repaint here?
//
// Ball class
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Ball implements Runnable {
protected Point loc;
protected int dx;
protected int dy;
protected Color color;
protected boolean flag;
private Graphics gra;
public Ball(Point loc,int dx,int dy,Graphics st)
{
this.loc=loc;
this.dx=1;
this.dy=1;
color=Color.blue;
this.gra=st;
flag=false;
}
public void paint(Graphics g)
{
g.fillOval((int)this.loc.getX(),(int)this.loc.getY(),20,20);
}
public void move()
{
this.loc.translate(this.dx,this.dy);
}
@Override
public void run() {
while(flag==false)
{
this.paint(gra);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
move();
}
}
}
//Myframe class
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class myframe extends JFrame {
private Ball b;
public myframe()
{
super("My Frame");
setSize(800,600);
}
public void run()
{
b=new Ball(new Point(100,100),10,10,getGraphics());
b.run();
}
}
//Main class
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame
{
/**
* @param args
*/
public static void main(String[] args) {
myframe jwin = new myframe();
jwin.setSize(600, 600);
jwin.setVisible(true);
jwin.run();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你应该尝试使用
repaint()
而不是this.paint(gra)
,并将其放在线程内,你还需要将组件添加到你的图形界面You should try using
repaint()
instead ofthis.paint(gra)
, and put it inside the thread, you also need to add the component to you graphic interface您需要重写 JComponent 类的 PaintComponent() 方法。让它完成您的绘画并将该组件添加到您的 GUI 中。
You need to override the paintComponent() method of the JComponent class. Have it do your painting and add that component to your GUI.