今年我在学校开始学习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());*/
}
}
我会感激任何帮助,如果出了什么问题,对不起我的英语。
答案 0 :(得分:0)
你不要试图把所有东西放在一个班级里。
创建一个在SwingUtilities invokeLater方法上启动Swing组件的类。在此类中创建JFrame。
创建一个扩展JPanel的DrawingPanel类。将DrawingPanel添加到JFrame。
创建一个Balls类,生成x和y中心以及10个球的半径。您可以使用java.awt.Point类来保存中心。该类是Java对象。它只会保持球的中心和半径。
创建一个实现Runnable的Drawing类。将Balls类的实例传递给Drawing类。
创建Drawing类的3个实例。将Drawing类的3个实例传递给DrawingPanel。使用paintComponent方法中的3个实例。 除了在paintComponent方法中绘制球外什么都不做。
将DrawingPanel的实例传递给Drawing类的3个实例。
GUI完成后,使用这3个实例启动3个线程。