在下面的代码中,我尝试通过绘制方法绘制一个椭圆,并从一个线程绘制另一个椭圆。但是,只有从paint方法绘制的椭圆形才会显示在JPanel上。如果不可能的话,请给其他想法。
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ani extends JPanel{
public Ani(){
JFrame jf = new JFrame();
jf.setSize(555,555);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(this);
jf.setVisible(true);
}
public void paint(Graphics g){
g.fillOval(22,22, 55, 55);
Thread t = new Thread(new MyThread(g));
t.start();
}
public static void main(String[] args) {
new Ani();
}
}
class MyThread extends Thread{
Graphics g;
MyThread(Graphics g){
this.g = g;
}
public void run(){
g.fillOval(222, 222, 55, 55);
}
}
试试这个
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ani2 extends JPanel implements Runnable{
private Thread animator;
int x=0, y=0;
private final int DELAY = 50;
public Ani2(){
JFrame jf = new JFrame();
jf.setSize(555,555);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(this);
jf.setVisible(true);
}
@Override
public void addNotify() {
super.addNotify();
animator = new Thread(this);
animator.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.fillOval(x,y, 55, 55);
g.dispose();
}
public void cycle() {
x += 1;
y += 1;
}
public static void main(String[] args) {
new Ani2();
}
@Override
public void run() {
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while (true) {
cycle();
repaint();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 2;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句