import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
public class BallGame
{
public static void main(String[]args)
{
Myframe frame=new Myframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class Myframe extends JFrame
{
public Myframe()
{
this.setTitle("A Ball Game");
this.setLocation(200,200);
/*(this.setResizable(false);*/
this.setSize(XSize,YSize);
Container ContentPane=getContentPane();
Mypanel panel=new Mypanel();
ContentPane.add(panel,BorderLayout.SOUTH);
}
private int XSize=400;
private int YSize=400;
}
class Mypanel extends JPanel
{
public Mypanel()
{
JButton Startbtn=new JButton("Start");
Startbtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Ball m=new Ball(canvas);
BallThread thread=new BallThread(m);
addball(m);
}
}
);
JButton Closebtn=new JButton("Close");
Closebtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
System.exit(0);
}
}
);
this.add(Startbtn);
this.add(Closebtn);
}
public void addball(Ball a)
{
canvas.add(a);
}
public void add(Ball b)
{
balls.add(b);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for (int i=0;i<balls.size();i++)
{
Ball b=(Ball)balls.get(i);
b.draw(g2);
}
}
private int i;
private ArrayList balls=new ArrayList();
private Mypanel canvas;
}
class BallThread extends Thread
{
public BallThread(Ball aball)
{
b=aball;
}
public void run()
{
try
{
for(i=0;i<=1000;i++)
{
b.move();
Thread.sleep(5);
}
}
catch(InterruptedException exception)
{
}
}
private Ball b;
private int i;
}
class Ball
{
public Ball(Component c)
{
canvas=c;
}
public void draw(Graphics2D g2)
{
g2.fill(new Ellipse2D.Double(x,y,XSIZE,YSIZE));
} public void move()
{
x+=dx;
y+=dy;
if(x<0)
{
x=0;dx=-dx;
}
if(x+XSIZE>=canvas.getWidth())
{
x=canvas.getWidth()-XSIZE;
dx=-dx;
}
if(y<0)
{
y=0;dy=-dy;
}
if(y+YSIZE>=canvas.getWidth())
{
y=canvas.getWidth()-YSIZE;
dy=-dy;
}
canvas.paint(canvas.getGraphics());
}
private Component canvas;
private static final int XSIZE=15;
private static final int YSIZE=15;
private int x=0;
private int y=0;
private int dx=2;
private int dy=2;
}
为什么得不到预期的效果
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
public class BallGame
{
public static void main(String[]args)
{
Myframe frame=new Myframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class Myframe extends JFrame
{
public Myframe()
{
this.setTitle("A Ball Game");
this.setLocation(200,200);
/*(this.setResizable(false);*/
this.setSize(XSize,YSize);
Container ContentPane=getContentPane();
Mypanel panel=new Mypanel();
ContentPane.add(panel,BorderLayout.SOUTH);
}
private int XSize=400;
private int YSize=400;
}
class Mypanel extends JPanel
{
public Mypanel()
{
JButton Startbtn=new JButton("Start");
Startbtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Ball m=new Ball(canvas);
BallThread thread=new BallThread(m);
addball(m);
}
}
);
JButton Closebtn=new JButton("Close");
Closebtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
System.exit(0);
}
}
);
this.add(Startbtn);
this.add(Closebtn);
}
public void addball(Ball a)
{
canvas.add(a);
}
public void add(Ball b)
{
balls.add(b);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for (int i=0;i<balls.size();i++)
{
Ball b=(Ball)balls.get(i);
b.draw(g2);
}
}
private int i;
private ArrayList balls=new ArrayList();
private Mypanel canvas;
}
class BallThread extends Thread
{
public BallThread(Ball aball)
{
b=aball;
}
public void run()
{
try
{
for(i=0;i<=1000;i++)
{
b.move();
Thread.sleep(5);
}
}
catch(InterruptedException exception)
{
}
}
private Ball b;
private int i;
}
class Ball
{
public Ball(Component c)
{
canvas=c;
}
public void draw(Graphics2D g2)
{
g2.fill(new Ellipse2D.Double(x,y,XSIZE,YSIZE));
} public void move()
{
x+=dx;
y+=dy;
if(x<0)
{
x=0;dx=-dx;
}
if(x+XSIZE>=canvas.getWidth())
{
x=canvas.getWidth()-XSIZE;
dx=-dx;
}
if(y<0)
{
y=0;dy=-dy;
}
if(y+YSIZE>=canvas.getWidth())
{
y=canvas.getWidth()-YSIZE;
dy=-dy;
}
canvas.paint(canvas.getGraphics());
}
private Component canvas;
private static final int XSIZE=15;
private static final int YSIZE=15;
private int x=0;
private int y=0;
private int dx=2;
private int dy=2;
}
为什么得不到预期的效果
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货