Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, Потоки с виртуальнывми классами 
:(
    Опции темы
BIV
Дата 11.12.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.12.2007

Репутация: нет
Всего: 1



Доброе всем время суток!
Значит, мне надо заставить вращать фигуры, которые создаются с помощью главного виртуального класса.
Я никак не могу понять что я написал лишнее или что не дописал
Программа компилируется нормально, но при запуске выдает ошибки.

Код

import java.awt.*;
abstract class figura implements Runnable
{        
   int x0,y0;
   int Длина;
   int Угол;
   int Скорость;
   Color Col;
   boolean flag=true;
   Graphics g1;
   Thread t;

   figura(int x,int y,int a,int dlina,Color col, int speed,Graphics g)
   {
    x0=x;
    y0=y;
    Длина=dlina;
    Угол=a;
        Скорость=speed;
    Col=col;
    g1=g;
        t = new Thread(this); 
 
   }
   abstract void picture(int x,int y,int a,int dlina,Color col, int speed);
   abstract void paint(Graphics g);   
   abstract void paint1(Graphics picture);

    void Speed(int Угол, int Скорость)
    {
         Угол=Угол+Скорость;
                   g1.drawString("Проход", 20, 100);

    }

    public void run()
    {
       while(flag)
       {  
          paint(g1);
          try { Thread.sleep(10); } catch(Exception e) { }
          g1.drawString("Проход", 20, 100);
          paint1(g1);
      Угол=Угол+Скорость;
       }
    }
}

class Отрезок extends figura
{
    double x1;
    double y1;
        Color Col1;
    void picture(int x,int y,int Угол,int Длина,Color col, int Скорость){}
    Отрезок(int x,int y,int Угол,int Длина,Color col, int Скорость,Graphics g)
    {
        super(x,y,Угол,Длина,col,Скорость,g);
        x0=x;
        y0=y;
                x1=x+Длина*(Math.cos(Угол));
        y1=y+Длина*(Math.sin(Угол));
        Col1=col;
    //    t=new Thread(this);
    }
    void paint(Graphics g)                                                                                
    {
        if (flag) 
                g.setColor(Col1);
                else g.setColor(Color.white);
        g.drawLine(x0,y0,(int)x1,(int)y1);
        g.drawString("Рисование"+x0+" "+x1+" "+y0+" "+y1+" Угол="+Угол+" Длина="+Длина+" Cos"+(Math.cos(Угол)), 20, 50);
    }
        void paint1(Graphics g)                                                                                
    {
        g.setColor(Color.white);
        g.drawLine(x0,y0,(int)x1,(int)y1);
        g.drawString("Стирание   "+x0+" "+x1+" "+y0+" "+y1+" Угол="+Угол+" Длина="+Длина+" Cos"+(Math.cos(Угол)), 20, 50);
    }

}

class Квадрат extends figura
{
    double x1,x2,x3;
    double y1,y2,y3;
        Color Col1;
    double pi=3.1415926535897932384626433832795/2;
    void picture(int x,int y,int Угол,int Длина,Color col, int Скорость){}
    Квадрат(int x,int y,int Угол,int Длина,Color col, int Скорость,Graphics g)
    {
        super(x,y,Угол,Длина,col,Скорость,g);
        x0=x;
        y0=y;
                x1=x+Длина*(Math.cos(Угол));
        y1=y+Длина*(Math.sin(Угол));
                x2=x+Длина*(Math.cos(Угол+pi));
        y2=y+Длина*(Math.sin(Угол+pi));
        x3=x2+Длина*(Math.sin(Угол+pi));
        y3=y2+Длина*-(Math.cos(Угол+pi));
        Col1=col;
    //    t=new Thread(this);
    }
    void paint(Graphics g)                                                                                
    {
        g.setColor(Col1);
        g.drawLine(x0,y0,(int)x1,(int)y1);
            g.drawLine((int)x0,(int)y0,(int)x2,(int)y2);
        g.drawLine((int)x2,(int)y2,(int)x3,(int)y3);
        g.drawLine((int)x1,(int)y1,(int)x3,(int)y3);
        
    }
    void paint1(Graphics g)                                                                                
    {
        g.setColor(Color.white);
        g.drawLine(x0,y0,(int)x1,(int)y1);
            g.drawLine((int)x0,(int)y0,(int)x2,(int)y2);
        g.drawLine((int)x2,(int)y2,(int)x3,(int)y3);
        g.drawLine((int)x1,(int)y1,(int)x3,(int)y3);
        
    }


}


class Восьмиугольник extends figura
{
    double x1,x2,x3,x4,x5;
    double y1,y2,y3,y4,y5;
        Color Col1;
    double pi=3.1415926535897932384626433832795/4;
    void picture(int x,int y,int Угол,int Длина,Color col, int Скорость){}
    Восьмиугольник(int x,int y,int Угол,int Длина,Color col, int Скорость,Graphics g)
    {
        super(x,y,Угол,Длина,col,Скорость,g);
        x0=x;
        y0=y;
                x1=x+Длина*(Math.cos(Угол));
        y1=y+Длина*(Math.sin(Угол));
                x2=x1+Длина*(Math.cos(Угол+pi));
        y2=y1+Длина*(Math.sin(Угол+pi));
        x3=x2+Длина*(Math.sin(Угол));
        y3=y2+Длина*(Math.cos(Угол+pi));
        x4=x3-Длина*(Math.cos(Угол));
        y4=y3-Длина*(Math.sin(Угол));
        x5=x4-Длина*(Math.cos(Угол+pi));
        y5=y4-Длина*(Math.sin(Угол+pi));
        Col1=col;
    //    t=new Thread(this);
    }
    void paint(Graphics g)                                                                                
    {
        
        g.setColor(Col1);
        g.drawLine(x0,y0,(int)x1,(int)y1);
            g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
        g.drawLine((int)x2,(int)y2,(int)x3,(int)y3);
        g.drawLine((int)x3,(int)y3,(int)x4,(int)y4);
        g.drawLine((int)x4,(int)y4,(int)x5,(int)y5);
        g.drawLine((int)x0,(int)y0,(int)x5,(int)y5);
        
    }
    void paint1(Graphics g)                                                                                
    {
        g.setColor(Color.white);
        g.drawLine(x0,y0,(int)x1,(int)y1);
            g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
        g.drawLine((int)x2,(int)y2,(int)x3,(int)y3);
        g.drawLine((int)x3,(int)y3,(int)x4,(int)y4);
        g.drawLine((int)x4,(int)y4,(int)x5,(int)y5);
        g.drawLine((int)x0,(int)y0,(int)x5,(int)y5);
        
    }

}

public class Abstract extends Dialog
{
   figura e[]=new figura[3];
   public Abstract(Frame f, String str)
   {
      super(f, str);
          Graphics g=getGraphics();
      e[0]=new Отрезок(100,100,45,100, new Color(45, 78, 67),4,g);
      e[1]=new Квадрат(200,300,30,134, new Color(7, 12, 237),2,g);
      e[2]=new Восьмиугольник(600,500,3,104, new Color(250, 0, 0),3,g);
          e[0].t.start();
          e[1].t.start();
      e[2].t.start(); 
       setSize(800, 600);
       setBackground(Color.white);  //Свет фона
       setVisible(true);
   }
  /* public void paint(Graphics g)
   {                                               
      for(int i=0;i<3;i++) e[i].paint(g);
   }   */
   public boolean handleEvent(Event e)
   {
      switch(e.id)
      {
          case Event.WINDOW_DESTROY:
        //    e[0].flag=e[1].flag=e[2].flag=false;
            dispose();
            System.exit(0);
            return true;
      }
      return super.handleEvent(e);
  }
   public static void main(String [] ar)
   {
      Abstract F=new Abstract(new Frame(), "Заголовок окна");               
   }
   
}

PM MAIL   Вверх
dorogoyIV
Дата 12.12.2009, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



что то много понаписано
Код

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame
{
 public Test()
 {
  setLayout(new GridLayout(3, 3));

  RevolvingFigure rf1 = new RevolvingFigure(50, 2, 4, 1);
  RevolvingFigure rf2 = new RevolvingFigure(50, 2, 2, -1);
  RevolvingFigure rf3 = new RevolvingFigure(50, 3, 2, 1);
  RevolvingFigure rf4 = new RevolvingFigure(50, 4, 2, 1);
  RevolvingFigure rf5 = new RevolvingFigure(50, 4, 4, -1);
  RevolvingFigure rf6 = new RevolvingFigure(50, 7, 2, -1);
  RevolvingFigure rf7 = new RevolvingFigure(50, 5, 2, 1);
  RevolvingFigure rf8 = new RevolvingFigure(50, 6, 6, -1);
  RevolvingFigure rf9 = new RevolvingFigure(50, 8, 2, -1);

  add(rf1);
  add(rf2);
  add(rf3);
  add(rf4);
  add(rf5);
  add(rf6);
  add(rf7);
  add(rf8);
  add(rf9);

  pack();
 }

 public static void main(String [] args)
 {
  JFrame f = new Test();
  f.setDefaultCloseOperation(3);
  f.setVisible(true);
 }
}

class RevolvingFigure extends JComponent
                      implements Runnable
{
 int radius, tops, speed, direction;
 double angle = 0;

 RevolvingFigure(int radius, int tops, int speed, int direction)
 {
  this.radius = radius;
  this.tops = tops;
  this.speed = speed;
  this.direction = direction;

  setPreferredSize(new Dimension(radius * 2, radius * 2));
  new Thread(this).start();
 }

 private Point [] getTops()
 {
  Point [] p = new Point [tops];
  double alpha = Math.PI * 2 / tops;

  for(int i = 0; i < tops; i++)
  {
   double x = Math.cos(alpha * i + Math.toRadians(angle)) * radius;
   double y = Math.sin(alpha * i + Math.toRadians(angle)) * radius;
   p [i] = new Point((int)x + radius, (int)y + radius);
  }
  return p;
 }

 public void paintComponent(Graphics g)
 {
  Point [] p = getTops();

  for(int i = 0; i < p.length - 1; i++)
   g.drawLine(p [i].x, p [i].y, p [i + 1].x, p [i + 1].y);

  g.drawLine(p [p.length - 1].x, p [p.length - 1].y, p [0].x, p [0].y);
 }

 public void run()
 {
  try
  {
   while(true)
   {
    Thread.currentThread().sleep(20);
    angle += speed * direction;

    if(angle >= 360 || angle <= -360)
     angle = 0;
    repaint();
   }
  }
  catch(Exception ex){}
 }
}

PM MAIL   Вверх
BIV
Дата 12.12.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.12.2007

Репутация: нет
Всего: 1



Тут у меня фишка в том, что тут эта программа пополняет предыдущую
Вот задания лабы, которая уже выполнена

Тема. Графика и классы
Общая часть
Создать абстрактный класс- геометрическая фигура. Класс содержит следующие поля: координаты геометрического центра фигуры на экране, поле, задающее размер фигуры, поле, задающее угловое положение фигуры, и поле, определяющее цвет фигуры; методы: конструктор для инициализации полей, и абстрактные методы для рисования фигуры на экране.

Вариант № 1
На основе абстрактного класса «фигура» разработать программу, содержащую описание трех графических классов: отрезок, квадрат, правильный восьмиугольник. Создать несколько объектов каждого из трех классов (не менее трех) для этого использовать один массив ссылок. Нарисовать фигуры в разных местах экрана (окна). Обеспечить перерисовку.

Вот код, который выполняет все требования, он работает как надо:
Код

import java.awt.*;
abstract class figura
{        
   int x0,y0;
   int Длина;
   int Угол;
   Color Col;


   figura(int x,int y,int a,int dlina,Color col)
   {
    x0=x;
    y0=y;
    Длина=dlina;
    Угол=a;
    Col=col; 
 
   }
   abstract void picture(int x,int y,int a,int dlina,Color col);
   abstract void paint(Graphics picture);
}   

/*class figura1 extends figura
{
   void picture(int x,int y,int ygol,int dlina,Color col){}
   figura1(int x,int y,int a,int dlina,Color col)
   {
       super(x,y,Угол,Длина,col); 
   }
}*/

class Отрезок extends figura
{
    double x1;
    double y1;
        Color Col1;
    void picture(int x,int y,int Угол,int Длина,Color col){}
    Отрезок(int x,int y,int Угол,int Длина,Color col)
    {
        super(x,y,Угол,Длина,col);
        x0=x;
        y0=y;
                x1=x+Длина*(Math.cos(Угол));
        y1=y+Длина*(Math.sin(Угол));
        Col1=col;
    }
    void paint(Graphics g)                                                                                
    {
        g.setColor(Col1);
        g.drawLine(x0,y0,(int)x1,(int)y1);
        g.drawString(""+x0+" "+x1+" "+y0+" "+y1+" Угол="+Угол+" Длина="+Длина+" Cos"+(Math.cos(Угол)), 20, 50);
    }

}

class Квадрат extends figura
{
    double x1,x2,x3;
    double y1,y2,y3;
        Color Col1;
    double pi=3.1415926535897932384626433832795/2;
    void picture(int x,int y,int Угол,int Длина,Color col){}
    Квадрат(int x,int y,int Угол,int Длина,Color col)
    {
        super(x,y,Угол,Длина,col);
        x0=x;
        y0=y;
                x1=x+Длина*(Math.cos(Угол));
        y1=y+Длина*(Math.sin(Угол));
                x2=x+Длина*(Math.cos(Угол+pi));
        y2=y+Длина*(Math.sin(Угол+pi));
        x3=x2+Длина*(Math.sin(Угол+pi));
        y3=y2+Длина*-(Math.cos(Угол+pi));
        Col1=col;
    }
    void paint(Graphics g)                                                                                
    {
        g.setColor(Col1);
        g.drawLine(x0,y0,(int)x1,(int)y1);
            g.drawLine((int)x0,(int)y0,(int)x2,(int)y2);
        g.drawLine((int)x2,(int)y2,(int)x3,(int)y3);
        g.drawLine((int)x1,(int)y1,(int)x3,(int)y3);
        
    }

}


class Восьмиугольник extends figura
{
    double x1,x2,x3,x4,x5;
    double y1,y2,y3,y4,y5;
        Color Col1;
    double pi=3.1415926535897932384626433832795/4;
    void picture(int x,int y,int Угол,int Длина,Color col){}
    Восьмиугольник(int x,int y,int Угол,int Длина,Color col)
    {
        super(x,y,Угол,Длина,col);
        x0=x;
        y0=y;
                x1=x+Длина*(Math.cos(Угол));
        y1=y+Длина*(Math.sin(Угол));
                x2=x1+Длина*(Math.cos(Угол+pi));
        y2=y1+Длина*(Math.sin(Угол+pi));
        x3=x2+Длина*(Math.sin(Угол));
        y3=y2+Длина*(Math.cos(Угол+pi));
        x4=x3-Длина*(Math.cos(Угол));
        y4=y3-Длина*(Math.sin(Угол));
        x5=x4-Длина*(Math.cos(Угол+pi));
        y5=y4-Длина*(Math.sin(Угол+pi));
        Col1=col;
    }
    void paint(Graphics g)                                                                                
    {
        g.setColor(Col1);
        g.drawLine(x0,y0,(int)x1,(int)y1);
            g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
        g.drawLine((int)x2,(int)y2,(int)x3,(int)y3);
        g.drawLine((int)x3,(int)y3,(int)x4,(int)y4);
        g.drawLine((int)x4,(int)y4,(int)x5,(int)y5);
        g.drawLine((int)x0,(int)y0,(int)x5,(int)y5);
        
    }

}

public class Abstract extends Dialog
{
   figura e[]=new figura[3];
   public Abstract(Frame f, String str)
   {
      super(f, str);
      e[0]=new Отрезок(100,100,45,100, new Color(45, 78, 67));
      e[1]=new Квадрат(200,300,30,134, new Color(7, 12, 237));
      e[2]=new Восьмиугольник(600,500,3,104, new Color(250, 0, 0)); 
       setSize(800, 600);
       setBackground(Color.white);  //Свет фона
       setVisible(true);
   }
   public void paint(Graphics g)
   {
//      figura e1=new Отрезок(100,100,45,34, new Color(45, 78, 67));
//      e[1]=new figura1(100,300,30,34, new Color(145, 118, 167));
//      e[2]=new figura1(200,300,10,34, new Color(235, 178, 237));
      for(int i=0;i<3;i++) e[i].paint(g);
   }
   public boolean handleEvent(Event e)
   {
      switch(e.id)
      {
          case Event.WINDOW_DESTROY:
            dispose();
            System.exit(0);
            return true;
      }
      return super.handleEvent(e);
  }
   public static void main(String [] ar)
   {
      Abstract F=new Abstract(new Frame(), "Заголовок окна");
/*      figura f[]=new figura[3];
      f[0]=new figura1(100,100,45,3, new Color(45, 78, 67));
      f[1]=new figura1(100,300,30,34, new Color(145, 118, 167));
      f[2]=new figura1(200,300,10,34, new Color(235, 178, 237));     */
   }
   
}


Следующее задание:

В предыдущем задании в абстрактный класс «Фигура» добавить поле, задающее угловую скорость фигуры, метод, задающий изменение параметров объекта (углового положения) за один шаг поворота, абстрактный метод для стирания фигуры с экрана. В заданные классы конкретных фигур добавит реализацию абстрактного метода. Используя потоковую многозадачность привести фигуры в одновременное вращение с разными угловыми скоростями вокруг геометрического центра.

Вот над этим я и мучаюсь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.