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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование на панели 
:(
    Опции темы
alafin
Дата 18.2.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как принудительно заставить перерисовать панель. К примеру, имеется код:
Код

public class IdePanel extends JPanel{
    public IdePanel(){}
    public void paintComponent(Graphics g){
        super.paintComponents(g);
        Graphics2D g2 = (Graphics2D)g;
        Rectangle2D rect = new Rectangle2D.Double(opx, opy, opwidth, opheight);
        Rectangle2D crect = new Rectangle2D.Double(crecx, crecy, crecwidth, crecheight);
        Ellipse2D tpcircle = new Ellipse2D.Double(tpx, tpy, 2*tpradius, 2*tpradius);
        Ellipse2D bmcircle = new Ellipse2D.Double(bmx, bmy, 2*bmradius, 2*bmradius);
        Line2D right = new Line2D.Double(rightsx, rightsy, rightex, rightey);
        Line2D left = new Line2D.Double(leftsx, leftsy, leftex, leftey);
        g2.draw(rect);
        g2.draw(crect);
        g2.draw(tpcircle);
        g2.draw(bmcircle);
        g2.draw(right);
        g2.draw(left);
    }
    public static int bmx;
    public static int bmy;
    public static int bmradius;
    public static int tpx;
    public static int tpy;
    public static int tpradius;
    public static int opx;
    public static int opy;
    public static int opwidth;
    public static int opheight;
    public static int crecx;
    public static int crecy;
    public static int crecwidth;
    public static int crecheight;
    public static int rightsx;
    public static int rightsy;
    public static int rightex;
    public static int rightey;
    public static int leftsx;
    public static int leftsy;
    public static int leftex;
    public static int leftey;
}

Хотелось бы что бы при изменении некоторых полей происходила перерисовка панели. Как это сделать?
--------------------
                              http://python.com.ua
PM MAIL   Вверх
LSD
Дата 18.2.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Вызови у панели repaint().


--------------------
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.
PM MAIL WWW   Вверх
alafin
Дата 18.2.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не подходит, т.к. фрейм у меня состоит из двух панелей. Одня для рисования, а другая - кнопочная панель. И при перерисовка производится в хаотическом порядке так что становится ничего не понятно.
--------------------
                              http://python.com.ua
PM MAIL   Вверх
LSD
Дата 18.2.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(alafin @  18.2.2007,  13:20 Найти цитируемый пост)
Не подходит, т.к. фрейм у меня состоит из двух панелей. Одня для рисования, а другая - кнопочная панель. И при перерисовка производится в хаотическом порядке так что становится ничего не понятно.

При чем тут это? Для принудительной перерисовки компонента создан метод repaint(). И то, что у тебя запутанная логика в приложении, никак на этот факт не влияет.


--------------------
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.
PM MAIL WWW   Вверх
alafin
Дата 18.2.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хорошо, и как выйти из положения?
--------------------
                              http://python.com.ua
PM MAIL   Вверх
LSD
Дата 18.2.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Я не понимаю, в чем проблема. Почему нельзя просто вызвать repaint() когда одно из полей изменится?
Сделай поля приватными, а доступ к ним сделай через методы getXXX()/setXXX(), и в setXXX() методах вызывай repaint().


--------------------
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.
PM MAIL WWW   Вверх
alafin
Дата 18.2.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я уже пробовал, все равно не перерисовывается. Единственным выходом вижу сделать фрейм не активным, а затем сразу же активным. Как это можно сделать? Дело в том что мое приложение считывает информацию из xml файла, который я выбираю после нажатия одного из пунктов в меню. После чего выбираю xml файл после которого идет перерисовка панели. Так же перерисовка происходит при сворачивании окна с последующим разворачиванием.
--------------------
                              http://python.com.ua
PM MAIL   Вверх
LSD
Дата 18.2.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Или выкладывай свой код, или пример демонстрирующий ошибку. А иначе это сеанс телепатии через интернет, получается.


--------------------
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.
PM MAIL WWW   Вверх
alafin
Дата 18.2.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



--------------------
                              http://python.com.ua
PM MAIL   Вверх
LSD
Дата 18.2.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



У меня вообще картинка не меняется, даже после сворачивания/разворачивания окна. Что там вообще надо делать?


--------------------
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.
PM MAIL WWW   Вверх
alafin
Дата 18.2.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ввести в поле Ox и Oy смещение(пока что это работает) и затем нажать кнопку Ok. Картинка должна(по идее) переместиться.
--------------------
                              http://python.com.ua
PM MAIL   Вверх
LSD
Дата 22.2.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Вообще нифига не меняется. Не пойму в чем дело.


--------------------
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.
PM MAIL WWW   Вверх
hamsterKSU
Дата 22.2.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



там все ясно, ты в классе IdeFrame создается один экземпляр класса IdePanel а в классе ButtonPanel другой того же типа, тот что в классе IdeFrame добавлен на панель, а тот что в ButtonPanel не добавлен только лишь может изменить статические переменные, и когда ты ему делаешь repaint то он перерисовывается но гдето в памяти т.к. на панель добавлен совсем другой экземпляр класа.
Мое решение 
Код

ButtonPanel(IdePanel _idePanel)
idePanel = _idePanel;

и в обработчике ОК
Код

ActionListener okListener = new ActionListener(){
            public void actionPerformed(ActionEvent event){
                ..............................//тут твой код
                idePanel.repaint();
            }
        };

и добавил в прорисовку несколько Ide Panel строк
Код

public void paintComponent(Graphics g){
        super.paintComponents(g);
        Rectangle r =  g.getClipRect();
        Color last = g.getColor();
        g.setColor(Color.WHITE);
        g.fillRect(r.x,r.y,r.width,r.height);
        g.setColor(last);
        Graphics2D g2 = (Graphics2D)g;
        Rectangle2D rect = new Rectangle2D.Double(opx, opy, opwidth, opheight);
        Rectangle2D crect = new Rectangle2D.Double(crecx, crecy, crecwidth, crecheight);
        Ellipse2D tpcircle = new Ellipse2D.Double(tpx, tpy, 2*tpradius, 2*tpradius);
        Ellipse2D bmcircle = new Ellipse2D.Double(bmx, bmy, 2*bmradius, 2*bmradius);
        Line2D right = new Line2D.Double(rightsx, rightsy, rightex, rightey);
        Line2D left = new Line2D.Double(leftsx, leftsy, leftex, leftey);
        g2.draw(rect);
        g2.draw(crect);
        g2.draw(tpcircle);
        g2.draw(bmcircle);
        g2.draw(right);
        g2.draw(left);
    }

вот у меня заработало

но я досих пор не пойму зачем в классе IdePanel все переменные сделаны статиком это не есть хорошо, имхо они будутдля всез экземпляров одинаковы, если ты загрузишь несколько рисунков - то будут траблы большие

Добавлено @ 01:08 
если хочешь могу выслать исправленый вариант smile 
PM MAIL ICQ   Вверх
alafin
Дата 22.2.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



hamsterKSU, спасибо, если можешь вышли, плз.
--------------------
                              http://python.com.ua
PM MAIL   Вверх
hamsterKSU
Дата 23.2.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



при наследовании какогото класcа, особенно из GUI, надобно вызывать в конструкторе конструктор суперклаcса
 
Код

super()

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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