Java新手:我如何创建一个控制我的paintComponent方法的线程?

时间:2015-12-29 19:03:27

标签: java multithreading jpanel paintcomponent runnable

今年我在学校开始学习java,我被要求创建一个程序,用3个线程绘制30个随机圆圈(每个线程10个)。

我不知道如何很好地使用paintComponent,但这就是我所做的:

class MioPanel extends JPanel implements Runnable {

@Override
public void paintComponent(Graphics g) {
  super.paintComponent(g); 
  Dimension dimCerchio1 = new Dimension(50, 50);

  for(int i = 0; i < 10; i++) {
    g.setColor(Color.black);
    g.drawOval((int) ((Math.random()*this.getWidth()) - (dimCerchio1.width)), (int) (Math.random()*this.getHeight() - (dimCerchio1.height )), dimCerchio1.width , dimCerchio1.height);
  }

  /*for(int i = 0; i < 10; i++) {
    g.setColor(Color.red);
    g.drawOval((int) ((Math.random()*this.getWidth()) - (dimCerchio1.width)), (int) (Math.random()*this.getHeight() - (dimCerchio1.height )), dimCerchio1.width , dimCerchio1.height);
  }

  for(int i = 0; i < 10; i++) {
    g.setColor(Color.blue);
    g.drawOval((int) ((Math.random()*this.getWidth()) - (dimCerchio1.width)), (int) (Math.random()*this.getHeight() - (dimCerchio1.height )), dimCerchio1.width , dimCerchio1.height);
  }*/
}    

@Override
public void run() {

}

run方法为空'因为我实际上不知道如何使用线程和绘制

这是主要的:

public class Main {
  public static void main(String[] args) {        
    MFrame mframe = new MFrame("Cerchi casuali");

    Thread first = new Thread(new MioPanel());

    /*Thread second = new Thread(new MioPanel());

    Thread third = new Thread(new MioPanel());*/
  }
}

我会感激任何帮助,如果出了什么问题,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

你不要试图把所有东西放在一个班级里。

  1. 创建一个在SwingUtilities invokeLater方法上启动Swing组件的类。在此类中创建JFrame。

  2. 创建一个扩展JPanel的DrawingPanel类。将DrawingPanel添加到JFrame。

  3. 创建一个Balls类,生成x和y中心以及10个球的半径。您可以使用java.awt.Point类来保存中心。该类是Java对象。它只会保持球的中心和半径。

  4. 创建一个实现Runnable的Drawing类。将Balls类的实例传递给Drawing类。

  5. 创建Drawing类的3个实例。将Drawing类的3个实例传递给DrawingPanel。使用paintComponent方法中的3个实例。 除了在paintComponent方法中绘制球外什么都不做。

  6. 将DrawingPanel的实例传递给Drawing类的3个实例。

  7. GUI完成后,使用这3个实例启动3个线程。