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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив графических объектов, управление каждым объектом массива 
:(
    Опции темы
luc
Дата 2.2.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Созданные графические объекты (прямоугольники), которые отрисовываются на картинки, сохраняю в массиве (как объекты)

По нажатию кнопки New, я создаю объектПрямоугольник и записываю его в массив rr. С массивом я наверно намудрил, но не в этом суть

и далее по кнопке Down , я перемещаю прямоугольник вниз.

Нажимаю на New, чтобы создать новый прямоугольник, соответственно сохраненный как следующий объект массива.
Но происходит следующее: 
Появляется(прорисовывается) новый прямоугольник, а старый, смещенный вниз исчезает.

Я хочу, сохранив объекты в массиве и потом с помощью CheckBox управлять каждым  (двигать, удалять...)

Что я должен изменить?
Спасибо.

Код

public class MyActionListener implements ActionListener
{
  
    public mainClass f;
   
   
    MyActionListener(mainClass f)
    {
       this.f=f;
    }
   
      
     public void actionPerformed(ActionEvent e)
     {
    
       if(e.getSource()==f.btnNew)
       {
             f.draw = true;
             f.index=f.index0;
             f.rr[f.index]= new MyRec(722,633,55,66);
             f.index0++;
             
         
        }
       

       f.btnDown.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                f.rr[f.index].y++; f.repaint();
                
                
            }
        }
   );
       
       
}    





Код

public class mainClass extends Frame 
{
    
    
    private MyActionListener myActionListener=new MyActionListener(this);
    
    public BufferedImage img ;
    public boolean draw = false;
    
    MyRec[] rr = new MyRec[10];
    
    int index = 0;
    int index0 = 0;
    
    public String file;
    
    public JCheckBox chb = new JCheckBox();
    
    public Button btnDown = new Button("Down");
    public Button btnNew = new Button("New");
    
    private Panel pnlNorth = new Panel();
    
     
    
    mainClass()
    {
      super("mainClass ");
      
      InitComponent();
     
      this.setSize(200,100);
          
      this.show();
          
    }    
    
     //PAINT
     public void paint(Graphics g) 
     {
           g.drawImage(img, 0, 0, getWidth(), getHeight(),null);
           
           if(draw)
           {
              drawRect( g,  rr);
            
               g.setColor(Color.red);
           
           }
         
       }
     
     //DrawRect
       public void drawRect(Graphics g, MyRec rr[])
       {
        
         g.setColor(new Color(255, 50, 0, 100));
         
         g.drawRect(rr[index].x, rr[index].y, rr[index].width, rr[index].height);
         
       }
       
           
       
            
    public static void main(String[] args) 
    {
        
        mainClass myFrame = new mainClass();

    }

}


PM MAIL   Вверх
EnJ
Дата 2.2.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010
Где: Харьков

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



Интересная программа smile как она у тебя работает? ))))))

Цитата

Появляется(прорисовывается) новый прямоугольник, а старый, смещенный вниз исчезает.

А что ты рисуешь в методе paint?? Вот твой код:
1.
Код

public void paint(Graphics g) 
     {
           g.drawImage(img, 0, 0, getWidth(), getHeight(),null);         
           if(draw)
           {
              drawRect( g,  rr);            
               g.setColor(Color.red);         
           }       
       }

2.
Код
а и
 public void drawRect(Graphics g, MyRec rr[])
       {        
         g.setColor(new Color(255, 50, 0, 100));        
         g.drawRect(rr[index].x, rr[index].y, rr[index].width, rr[index].height);         
       }

В пэйнте ты вызываешь метод DrawRect, в котором рисуешь только один прямоугольник. При этой реализации, тебе надо в drawRect в цикле забивать твой массив прямоугольников.

Реализации программы очень интересная. Кто тебя так учил(или по какой книге учился)?
Почему не на Swing делаешь, а чекбокс из него берешь?
Я структуру программы немного по другому реализовал бы.
PM MAIL ICQ   Вверх
luc
Дата 3.2.2010, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Реализации программы очень интересная. Кто тебя так учил(или по какой книге учился)?


Я сам себя учу. smile 
читаю инфу в интернете и пользуюсь одним методическим пособием по программированию на Java.
Но мне всё же очень интересно, что ты этим хотел сказать, чем моя реализация "особенна".

Цитата

Я структуру программы немного по другому реализовал бы. 


А как бы ты ее реализовал?

Цитата

Почему не на Swing делаешь, а чекбокс из него берешь?


чекбокс какраз свинговский. 
Я как бы пытаюсь реализовать свою задачу всем что под рукой. Хочу чтоб заработало  smile 
А уж потом, чтоб реализация не выглядела комично.

Цитата

При этой реализации, тебе надо в drawRect в цикле забивать твой массив прямоугольников.


Я же не хочу все сразу забивать. Например, по нажатию New , создается и прорисовывается новый объект и заносится в массив. Когда мне надо я выбираю по средством чекбокс нужный мне объект и или сдвигаю на картинке или удаляю из массива, с картинки.




PM MAIL   Вверх
EnJ
Дата 3.2.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010
Где: Харьков

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



Цитата

Я сам себя учу.  

Сам такой же ;) Учусь по книге  Кей Хорстман и Гари Корнелл "Java 2. Том 1. Основы", восьмое издание + что найду. Есть еще "Том 2. Тонкости программирования", скоро придется бежать и ее покупать smile

Цитата

Но мне всё же очень интересно, что ты этим хотел сказать, чем моя реализация "особенна".

Ну например тем, что  ты в обработчике событий кнопки определяешь еще один обработчик событий. Думаю правильнее будет для каждой кнопки сделать свой обработчик.

Цитата

Я же не хочу все сразу забивать. Например, по нажатию New , создается и прорисовывается новый объект и заносится в массив. Когда мне надо я выбираю по средством чекбокс нужный мне объект и или сдвигаю на картинке или удаляю из массива, с картинки.

А тебе и не надо все сразу забиватьsmile Чтобы рисовалось столько прямоугольников, сколько ты добавляешь такой цикл:
Код

 public void drawRect(Graphics g, MyRec rr[])
       {        
         g.setColor(new Color(255, 50, 0, 100));        
         int i = 0;
         while(rr[i] != null){
                g.drawRect(rr[i].x, rr[i].y, rr[i].width, rr[i].height); 
                i++;
         }    
       }

У тебя при инициализации массива все объекты имеют ссылки null, только потом ты создаешь объекты типа прямоуголиник.

Цитата

А как бы ты ее реализовал?


1. В библиотеке Java 2D есть java.awt.geom.Rectangle2D.Double или java.awt.geom.Rectangle2D.Float - классы с готовой реализацией прямоугольноков. Чтобы их рисовать нужен объект класса Graphics2D( точнее java.awt.Graphics2D ) - он является подклассом Graphics. Для начала сделай так, чтобы твоя программа работала с твоим классом, а потом по желанию можешь и переделать.
2. Как я и сказал раньше - для каждой кнопки реализовать свой обработчик событий. Плюс сделать эти классы вложеными.
И еще некоторые мелочи, пока они не столь важны, если тебя пока интересует корректная работа твоей программы.

Цитата

А уж потом, чтоб реализация не выглядела комично.

Не хотел тебя обидеть. Ведь сам такой же  smile 
PM MAIL ICQ   Вверх
luc
Дата 3.2.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо за ответ!

Пытаясь изучить, разобраться в чем либо чаще всего бьюсь в стенку. smile 
Вроде бы в интернете всё есть, документация.... а получается как слепой...

Слабое место это не умение работать с документацией.

Буду дальше двигать.

Еще раз спасибо.
PM MAIL   Вверх
EnJ
Дата 3.2.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010
Где: Харьков

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



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

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

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


 




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


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

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