先看代码import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;public class GraphMov extends JFrame
{
protected GPanel pan;
public GraphMov()
{
super("GraphMov");
setSize(450,450);
pan=new GPanel();
add(pan);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class GPanel extends JPanel
{
public GPanel()
{
super();
setSize(400,400);
}
public void paint(Graphics g)
{
super.paint(g);
Graphics g2=getGraphics();
Mov m=new Mov(g2);
m.start();
}
class Mov extends Thread
{
Ellipse2D.Double ec;
int xb=50,yb=50;
Graphics2D g2d;
public Mov(Graphics g)
{
Graphics2D g2d=(Graphics2D)g;
}
public void run()
{
//while(xb<=300)
//{
ec=new Ellipse2D.Double(xb,yb,100,100);
g2d.draw(ec);
//for(int i=0;i<1000;i++){}
//xb++;yb++;
//}
}
}
}
public static void main(String[] args)
{
GraphMov frames=new GraphMov();
}
}
本人刚接触线程和图像类,上面代码本来是想实现这样的功能:用线程Mov再程序里画一个椭圆,代码通过javac,但是运行后Panel上没出现图形,想请问是什么问题?是JPanel类paint的Graphics传不进线程去吗?谢谢!
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;public class GraphMov extends JFrame
{
protected GPanel pan;
public GraphMov()
{
super("GraphMov");
setSize(450,450);
pan=new GPanel();
add(pan);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class GPanel extends JPanel
{
public GPanel()
{
super();
setSize(400,400);
}
public void paint(Graphics g)
{
super.paint(g);
Graphics g2=getGraphics();
Mov m=new Mov(g2);
m.start();
}
class Mov extends Thread
{
Ellipse2D.Double ec;
int xb=50,yb=50;
Graphics2D g2d;
public Mov(Graphics g)
{
Graphics2D g2d=(Graphics2D)g;
}
public void run()
{
//while(xb<=300)
//{
ec=new Ellipse2D.Double(xb,yb,100,100);
g2d.draw(ec);
//for(int i=0;i<1000;i++){}
//xb++;yb++;
//}
}
}
}
public static void main(String[] args)
{
GraphMov frames=new GraphMov();
}
}
本人刚接触线程和图像类,上面代码本来是想实现这样的功能:用线程Mov再程序里画一个椭圆,代码通过javac,但是运行后Panel上没出现图形,想请问是什么问题?是JPanel类paint的Graphics传不进线程去吗?谢谢!
{
、Graphics2D去掉
g2d=(Graphics2D)g;
}
比如你可以用一个Image对象得到一个graphics
可以看看api中的Image