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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с перерисовкой графики на jPanel 
:(
    Опции темы
Nieky
Дата 11.4.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть переопределенная jPanel, в ней немного зафигачил отрисовку графики. На этой панели стоит листенер авторесайз. переписал Onpaint:
Код

@Override
    public void paintComponent (Graphics g){
    super.paintComponent(g);
    g2 = (Graphics2D)g;
    Dimension myDimention =getMapSize(geometryMap);
    if(this.getWidth() < this.getHeight())
    g2.scale(this.getWidth()/myDimention.getWidth(), this.getWidth()/myDimention.getWidth());
    else
        g2.scale(this.getHeight()/myDimention.getHeight(), this.getHeight()/myDimention.getHeight());
    g2.transform(t);
    t.setToTranslation(10,-myDimention.getHeight()+10);
    g2.transform(t);
//
//    oldT = t;
//    g2.draw(polygone);
    
     drawGeometryMap();
    
    //this.repaint();
    }


После стандратными компонентами накидал в нетбинсе форму, JPanel и уже на той форме делаю :
Код

jPanel1.add(myPanel);
jPanel1.repaint();

В общем когда меняются размеры окна мышкой например, происхзодит перерисовка координат, но на главной панели ничего не отображается. Но в консоли видно, что переписанная jPanel вызывает Onpain...
В общем не знаю, как на jPanel1 перерисовалась графика.
PM MAIL   Вверх
Connie
Дата 11.4.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Nieky, а можно посмотреть код лиснера?
PM MAIL WWW   Вверх
Nieky
Дата 12.4.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот в общем проектsmile в целях ускорения решения проблем) собирается вроде без проблем, парулиб подключить если че.
Вот, в пакете sygis есть sygisapp вот этот класс нада запускать) и потом в меню выбрать draw начнется загрузка бинарника - в нем картаsmile и потом начнется отрисовка, которая осуществляется в пакете sgraphics ->DrawPanel. Сейчас я попробывал листенер поставить на jPanel Resizable... 
В общем буду оч признателен...
rar файл находится тут: http://disk.tom.ru/uklkvhx



Это сообщение отредактировал(а) Nieky - 12.4.2009, 17:25
PM MAIL   Вверх
Nieky
Дата 12.4.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот листенер:
Код

 dp = new DrawPanel(gs.getMyMap(),jPanel2);
            dp.setSize(jPanel2.getWidth(), jPanel2.getHeight());
            jPanel2.add(dp, BorderLayout.CENTER);
           // jPanel2.set
          // jPanel2 = dp;
            bi = new BufferedImage(jPanel2.getWidth(),jPanel2.getHeight(),BufferedImage.TYPE_INT_RGB);
            jPanel2.addComponentListener(new ComponentAdapter() {
             @Override
             public void componentResized(ComponentEvent e) {
                 System.out.println("Main panel: "+jPanel2.getHeight()+" "+jPanel2.getWidth());
                 System.out.println("From DrawPanel: "+dp.getHeight()+" "+dp.getWidth());
                 dp.setSize(jPanel2.getWidth(), jPanel2.getHeight());
                // dp.setSize(scaler, scaler)
                 System.out.println("After setting dimentions: "+dp.getHeight()+" "+dp.getWidth());
                 Rectangle r = ((Component)e.getSource()).getBounds();
                 BufferedImage biNew = new BufferedImage(r.width, r.height, BufferedImage.TYPE_INT_RGB);
                 biNew.getGraphics().drawImage(bi,0,0, null);
                 bi = biNew;
//                 panelka.removeAll();
//                 panelka.add();
//
                 //panelka.repaint();

             }
         });
           jPanel2.repaint();

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


Опытный
**


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

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



Nieky, а не проще переопределить JPanel своим классом и там в методе paint рисовать чего душе угодно? Перерисовка будет происходить автоматом.


Я правда делал унаследование от JLabel

Цитата
В общем когда меняются размеры окна мышкой например, происхзодит перерисовка координат, но на главной панели ничего не отображается. Но в консоли видно, что переписанная jPanel вызывает Onpain...
Тут вот еще в чем дело, JPanel - это контейнер, она принимает размеры тех компонент, которые на нее ложатся, нет компонент - нет размера, а может и смысла в перерисовке? smile 

Попробуйте переопределить paint у JLabel или добавьте какой нибудь компонент на Вашу панельку, ту же Label, что бы "сквозь" нее можно было посмотреть.

Код Ваш не грузил и не смотрел, туго со временем :(

Вот еще одно замечание, Вы не получаете Graphics у панели, а на чем Вы рисуете? На BufferedImage? Но его то же нужно к чему то прикрепить, как программа догадается, что то, что нарисовано на BufferedImage должно быть нарисовано на панели?

Вот как я рисую на JLabel

Код

@Override
    public void paint(Graphics g){
        Graphics2D g2d = (Graphics2D) g.create();
        //Rectangle r = g2d.getClipBounds();
        //System.out.println(r.x+" "+r.y+" "+r.width+" "+r.height);
        //
        g2d.setFont(new Font(Font.SANS_SERIF,Font.BOLD,11));
        Dimension d = this.getSize();
        //int lowY = d.height;
        //System.out.println("height="+lowY);
        float deltaY = 0;
        float height = (float)d.height;
        float position = 0f;
        float lowY = height;
        for(int i=0;i<zones.length;i++){

            deltaY = height * zones[i];
            //System.out.println("del="+deltaY+" lowY="+lowY);

            g2d.setColor(colors[i]);
            g2d.fillRect(0, Math.round(lowY - deltaY) ,
                    lwidth,Math.round(deltaY) );
            g2d.setColor(Color.BLACK);
            g2d.drawString(labels[i], lwidth+2,
                    Math.round(lowY - deltaY/2) + 5   );

            lowY -= deltaY;
        }


Это сообщение отредактировал(а) Connie - 13.4.2009, 12:16
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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