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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JOGL&Swing 
:(
    Опции темы
Vitaly333
Дата 3.6.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Возникла проблема с отрисовкой сцены на Swing-овском компоненте.

Вот накидал небольшой примерчик:

Код JFrame. На него кладется панель а уже на неё Render, наследуемый от GLCanvas 

Код

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class MyFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private Render render = null;

    /**
     * This is the default constructor
     */
    public MyFrame() {
        super();
        render = new Render();
        initialize();
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(render);
        }
        return jContentPane;
    }

    public static void main(String[] args ){
        
        MyFrame frame = new MyFrame();
        frame.setVisible(true);
        
    }
    
}



В этом классе рендерится вся сцена: 

Код

import java.awt.Graphics;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;

import com.sun.opengl.util.GLUT;

public class Render extends GLCanvas implements GLEventListener {

    
    GLUT glut = null;
    GLU  glu = null;
    
    public Render() {
        // TODO Auto-generated constructor stub
        setSize(300,200);
        addGLEventListener(this);
        glut = new GLUT();
        glu = new GLU();
    }
    
    
    
    
    @Override
    public void display(GLAutoDrawable arg0) {
        // TODO Auto-generated method stub        
        GL gl = arg0.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glTranslatef(0.0f, 0.0f, -5.0f);
        gl.glColor3f(0.0f, 1.0f, 0.0f);
        glut.glutWireTeapot(1.0f);            
        gl.glFlush();
    }

    @Override
    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
        // TODO Auto-generated method stub
    }

    @Override
    public void init(GLAutoDrawable arg0) {
        GL gl = arg0.getGL();     
        gl.glClearColor(1.0f, 1.0f, 1.0f, 0f);        
    }

    @Override
    public void reshape(GLAutoDrawable glDrawable, int x, int y, int width,
            int height) {
        final GL gl = glDrawable.getGL();

        if (height <= 0) // avoid a divide by zero error!
            height = 1;
        final float h = (float) width / (float) height;
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, h, 1.0, 20.0);
        
        
    }

    
    @Override
    public void paint(Graphics graphics) {
        // TODO Auto-generated method stub
        //super.paint(arg0);
        display();
    }
    
    @Override
    public void update(Graphics graphics) {
        // TODO Auto-generated method stub
        //super.update(arg0);
        paint(graphics);
    }
    
}



Вообщем проблема состоит в том, что сцена не всегда прорисовывается!!! При изменении положении окна, его размеров, перекрытии его другим окном, сцена когда прорисовывается а когда и нет, а вместо неё всё заливается серым цветом(фоном JPanel).

Причем такая проблема возникает только тогда, когда Java приложение запущено не из под среды (через jar или bat -ник в Windows). Когда запускаю из под среды (в Эклипсе) отрисовывается всё нормально.
В чём может быть дело?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0391 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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