2015-12-29 3 views
0

В этом году я начал java в школе, меня попросили создать программу, которая с 3-мя нитями красками 30 случайных кругов (по 10 для каждого потока).Java-новичок: как мне создать поток, который управляет моим методом paintComponent?

Я не знаю, как работать с 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() { 

} 

Метод выполнения пуста, потому что я на самом деле не знаю, как я могу работать с как нить и краски

Вот главное:

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

Вы не можете этого сделать. Компоненты Swing Java не являются потокобезопасными. Для этих обновлений вам нужно использовать один поток - поток Dispatch Event. – markspace

+0

Итак, как я могу сделать что-то похожее? – Jacopo

+0

Это не новичок. Это назначение представляется более подходящим для промежуточного или расширенного класса Java. –

ответ

0

Вы не пытаетесь положить все в один класс.

  1. Создайте класс, который запустит компоненты Swing в методе SwokeUtilities invokeLater. Создайте JFrame в этом классе.

  2. Создайте класс DrawingPanel, который расширяет JPanel. Добавьте DrawingPanel в JFrame.

  3. Создайте класс шаров, который генерирует центр x и y и радиус 10 шаров. Вы можете использовать класс java.awt.Point для размещения центра. Этот класс является объектом Java. Он ничего не делает, кроме как удерживает центр и радиус шаров.

  4. Создайте класс чертежа, который реализует Runnable. Передайте экземпляр класса Balls классу Drawing.

  5. Создайте 3 экземпляра класса Drawing. Передайте 3 экземпляра класса Drawing в DrawingPanel. Используйте 3 экземпляра метода paintComponent. Не делайте ничего, кроме как рисовать шарики в методе paintComponent.

  6. Передайте экземпляр DrawingPanel в 3 экземпляра класса Drawing.

  7. Запустите 3 потока с этими тремя экземплярами после завершения графического интерфейса пользователя.