我有一個Circle類,每個圓圈元素都有一個線程來移動jpanel中的圓。 CirclePanel類與實際的GUI是分開的,並且有一個圓形元素的向量。我需要一種重新繪製jpanel的方式,而不必每次都創建一個新的面板。 CirclePanel在GUI類中實例化,創建一個包含CirclePanel的框架。每次圓圈移動時如何重新繪製面板?謝謝 !我怎樣才能引用一個擴展JPanel從另一個類的類
編輯:把一些代碼
Circle類:
public class Circle extends Thread {
public Ellipse2D.Double thisCircle;
public int size=30,xPoz,yPoz;
Random r=new Random();
int red=r.nextInt(255),green=r.nextInt(255),blue=r.nextInt(255);
int deltax,deltay;
public boolean ballStarted;
public Circle()
{xPoz=(int)Math.random()*300;
yPoz=(int)Math.random()*300;
ballStarted = true;
deltax=-10+(int)(Math.random()*21);
deltay=-10+(int)(Math.random()*21);
if ((deltax == 0) && (deltay == 0)) { deltax = 1; }
thisCircle=new Ellipse2D.Double(xPoz,yPoz,size,size);
}
public void draw(Graphics2D g2d){
if(thisCircle!=null)
{g2d.setColor(new Color(red,green,blue,80));
g2d.fill(thisCircle);
}
}
public int PozX(){return xPoz;}
public int PozY(){return yPoz;}
public int radius(){return size*2;}
public void grow(){
size++;
thisCircle.setFrame(xPoz,yPoz,size,size);
}
public void move(){
int oldx=xPoz;
int oldy=yPoz;
int newx=oldx+deltax;
int newy=oldy+deltay;
if(newx+size>800 || newx<0)
deltax=-deltax;
if(newy+size>600 || newy<0)
deltay=-deltay;
thisCircle.setFrame(newx,newy,size,size);
}
public void run(){
try {
Thread.sleep(100);
}
catch (InterruptedException e)
{ System.out.println("Thread Halted");}
while(ballStarted)
{move(); }
}
}
這是Circle面板類:
public class CirclePanel extends JPanel {
private int prefwid, prefht;
public ArrayList<Circle> Circles = new ArrayList<Circle>();
public ShapePanel(int pwid, int pht) {
prefwid = pwid;
prefht = pht;
createCircles();
}
public void createCircles() {
for (int i = 1; i <= 20; i++) {
Circle nextCircle = new Circle();
Circles.add(nextCircle);
nextCircle.start();
}
}
public Dimension getPreferredSize() {
return new Dimension(prefwid, prefht);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (int i = 0; i < Circles.size(); i++) {
(Circles.get(i)).draw(g2d);
}
}
}
沒有代碼,我們就像貝多芬沒有耳朵...... – 2013-04-08 16:55:46
你有什麼迄今所做?沒有表現出一點點努力的問題很少引起SO的反應。 – 2013-04-08 16:56:19
爲什麼你需要每個圈子的線程? – Aboutblank 2013-04-08 17:16:29