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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рисованме графиков и метод paint 
V
    Опции темы
katala
Дата 8.6.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



народ помогите!!
допустим есть метод 

Код

 public void paint(Graphics g){
      g.drawLine(1,1,120,120);
  }

 
как сделать что бы например при нажатии кнопки рисовалась другая линия. и почему если делать 
Код

p.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e){
           c.repaint();    
           }
       });

то пропадает линия которая была нарисована?????? 
PM MAIL   Вверх
batigoal
Дата 9.6.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Потому что перерисовка каждый раз производится полностью. Тебе нужно запоминать в массиве или списке координаты всех введенных линий, и в paint'е пробегаться по всему массиву, рисуя каждую линию. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
katala
Дата 9.6.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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




Цитата

 и в paint'е пробегаться по всему массиву, рисуя каждую линию. 

чето я не понял. так в paint'e  и так рисуется линия!!!
а как рисовать что то новое при нажатии на кнопку????
 
PM MAIL   Вверх
batigoal
Дата 9.6.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(katala @  9.6.2006,  10:32 Найти цитируемый пост)
чето я не понял. так в paint'e  и так рисуется линия!!!

Вот именно. ОДНА. А надо - несколько.

Алгоритм приблизительно такой:
Код

class LineDrawer
{
  ArrayList linesList = new ArrayList();

  public void paint(Graphics g) 
  {
      // рисуем каждую линию в списке
      for(int i=0; i<linesList.size(); i++)
      {
        Line line = (Line) linesList.get(i);
        line.draw(g);
      }
  }
  ...
  this.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e){
      linesList.add(new Line(...));
      c.repaint();    
     }
   });
}
 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
powerOn
Дата 9.6.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Есть модель, т.е. данные, например массив. Есть вид - т.е. способ отображения этих данных на экране.
Простой пример: есть некая статистическая информация, по которой можно построить диаграмму.  Диаграмма может быть точечной, круговой, линейной и какой угодно другой. Так вот здесь статистические данные - это модель, а то как они будут отображаться на экране - вид. Данные одни и теже, а отображение много. Или наоборот: меняешь данные (например получили новые статистические результаты), а вид остается тем же. В результате увидишь туже диаграмму отображающую другие данные. Это называется архитектура Model-View-Controller (Модель-Вид-Контроллер). Можно легко менять составные чати системы и получать определенную гибкость.

Вот и в Java примерно такой же принцип. Да и не только в Java. Хочешь прорисовать новое изображение? - Меняешь модель, и определяешь способ прорисовки, а система перерисует тогда когда нужно будет. Для того чтобы система знала что прорисовывать есть метод paint(Graphics g), ты преопределяешь его, тем самым устанавливая правила КАК рисовать. Изменяешь модель - влияешь на ЧТО рисовать.

 


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Бывалый
*


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

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



извините за глупый вопрос, но что это за обьект Line?? из какой библиотеки. 
допустим есть два массива с координатами по х и по y: 
Код

int masx[]={5,150,100,70,20};
int masy[]={5,5,100,50,20};
потом в методе рисую линию
Код

public void paint(Graphics g){
     g.drawLine(masx[0],masy[0],masx[1],masy[1]);
 }

а потом при нажатии на кнопку
Код

p.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e){
            
          c.repaint()
           }
       });

так надо делать??? но почему тогда экран становиться просто серым и нет линии??? обьясните плиз что я делаю неверно!!!! 
PM MAIL   Вверх
powerOn
Дата 9.6.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(katala @  9.6.2006,  12:00 Найти цитируемый пост)
извините за глупый вопрос, но что это за обьект Line?? из какой библиотеки. 


А где ты объект класса  Line используешь? Здесь ты линию по начальным и конечным координатам рисуешь:
Цитата(katala @  9.6.2006,  12:00 Найти цитируемый пост)
потом в методе рисую линию
код Java
public void paint(Graphics g){
     g.drawLine(masx[0],masy[0],masx[1],masy[1]);
 }

Лично я стандартного класса Line в своей практике пока не встречал. Видел только java.awt.geom.Line2D.  smile 

Цитата(katala @  9.6.2006,  12:00 Найти цитируемый пост)
но почему тогда экран становиться просто серым и нет линии??? обьясните плиз что я делаю неверно!!!!  

Ты случайно метод paint() не у JFrame переопределил? Выкладывай код класса полность. Попробуем разобраться. 


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Бывалый
*


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

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



Код

public class Main extends JApplet{
   
    int masx[]={5,150,100,70,20};
    int masy[]={5,5,100,50,20};
    Button b=new Button("Ok");
    final Container c=getContentPane();
   
   public void init() {
        
        c.setLayout(null);
        c.setSize(600,600);
       b.setBounds(435,10,50,20);
       
       c.add(b);
       
       b.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            c.repaint();  
         }
       });
       
            
       
    }
    
    public void paint(Graphics g){
      g.drawLine(masx[0],masy[0],masx[1],masy[1]);
   }
  
    
}


вот и весь код вроде все просто. но как сделать что бы нажимать кнопку и рисовалось что то другое ???77 
PM MAIL   Вверх
batigoal
Дата 9.6.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(katala @  9.6.2006,  12:00 Найти цитируемый пост)
извините за глупый вопрос, но что это за обьект Line?? из какой библиотеки. 

Это был не рабочий код, а набросок алгоритма. Line - это класс, который я бы сделал для хранения координат линии. Додумай сам. Полный код писать у меня времени нет. 


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

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

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


 




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


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

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