![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
irdis13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
Доброго времени суток!!
Пишу курсовик "кластерный анализ" и возникла проблема с рисованием на панели! Всё хорошо, всё рисуется, но не пойму как по какому-либо событию дорисовать на панели линию!!! к примеру вот код панели
тут рисуется линия только при её создании а затем мне в цикле нужно постоянно дорисовывать n-ное количество линий (и не тоолько) в этой панели. Сама проблема в том, что Graphics доступен только в методе public void paintComponent(Graphics g) и поэтому не могу дорисовать линию!! Может как-то буферизовать уже нарисованное изображение, а потом к нему дорисовывать что-то? Помогите кто чем может |
|||
|
||||
pathfinder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
||||
|
||||
irdis13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
Спасибо за ссылку, очень помог, когда искал такой темы не нашел, наверное неудачно название дали!!! В принципе так и думал делать это!! Я так вижу это ты там и отвечал, не мог бы ответить еще на один вопросик, почему ты выбрал для хранения объектов для рисования именно ArrayList?
|
|||
|
||||
pathfinder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
Хранить объекты для рисования можно как угодно(хоть в связном списке). Пример что я написал очень простой. В реальности желательно использовать такую структуру данных, которая позволяла бы выбирать только те фигуры, что попадают в текущий прямоугольник отсечения(часть компонента, которую нужно прорисовать).
|
|||
|
||||
irdis13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
После прочтения нескольких тем разных форумов понял, что мне нужно лучше всего рисовать в BufferedImage, а потом просто прорисовывать его в моей панели (так мне показалось наиболее удобно и целесообразно)!! Но вот проблема, оно не рисуется почему-то код ниже:
Там при нажатии кнопки должна нарисоваться новая линия! Вылезают какие-то экзэпшены что не правильно? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
А что машает запостить сюда эти эксепшены? Скорее всего дело в том, что компонент во время создания имеет нулевой размер, и значит img будет тоже размера 0. Правильно надо делать так: повесить слушателя на ресайз, и при ресайзе пересоздавать img, с новым размером. Добавлено через 1 минуту и 35 секунд И перед тем как смело выполнять drawLine(x1, y1, x2, y2) было бы неплохо проверить, что x1, y1, x2, y2 не превышают размеры панели. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
irdis13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
Спасибо за ответ!!! Немного помудрив пришёл к тому же ответу и нашел кое-какое решение!! Вот оно:
Теперь мне нужно после создания объекта вызывать метод init()! Понимаю, что через одно место, но придумать ничего другого не смог(( Не мог бы мне написать как поставить слушатель на ресайз?? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |