有什么方法可以使用Java中的Thread在JPanel上绘制图形吗?

马蒙努尔·里蒙(Mamunur Rimon)

在下面的代码中,我尝试通过绘制方法绘制一个椭圆,并从一个线程绘制另一个椭圆。但是,只有从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);       
    }
}
博士 阿卜杜勒·巴里(Abdul Bari)|

试试这个

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用户可以使用实时代码绘制图形吗?

来自分类Dev

我可以使用 d3.js 使用 json 字符串或 json 对象绘制图形吗?

来自分类Dev

不使用Java绘制图形

来自分类Dev

不使用Java绘制图形

来自分类Dev

您可以绘制图形而不渲染它吗?

来自分类Dev

在Linux framebuffer上绘制图形的最简单方法是什么?

来自分类Dev

在Windows上使用PyCharm的matplotlib不会绘制图形,没有错误

来自分类Dev

如何从java中的集合内容绘制图形

来自分类Dev

如何使用Matplotlib在Spyder中绘制图形?

来自分类Dev

使用Graphview在android中绘制图形?

来自分类Dev

如何使用C ++程序中的gnuplot绘制图形

来自分类Dev

使用粘贴在R中循环绘制图形

来自分类Dev

使用多轴在MS Excel中绘制图形

来自分类Dev

如何使用Matplotlib在Spyder中绘制图形?

来自分类Dev

需要帮助使用 matplotlib 在 tkinter 中绘制图形

来自分类Dev

使用另一个类中的方法绘制图形

来自分类Dev

可以在R中绘制图表吗?

来自分类Dev

从Java教科书中绘制图形

来自分类Dev

在NetworkX中绘制图形

来自分类Dev

在OpenGL中绘制图形

来自分类Dev

在WFA中绘制图形

来自分类Dev

使用Haskell绘制图形

来自分类Dev

使用Haskell绘制图形

来自分类Dev

使用 matplotlib 绘制图形

来自分类Dev

使用pylab绘制图形

来自分类Dev

使用 R 绘制图形

来自分类Dev

在C#中的控件上绘制图层的最佳方法是什么?

来自分类Dev

在Qt中绘制图的最佳方法是什么?

来自分类Dev

为什么我的绘制图像在JPanel上闪烁?