MouseEvent

2 respostas
rodrigo.achilles

Olá pessoal,
Tenho uma classe que faz o Painel e nela te uma ação de Mouse que no método mouseClicked, cria um objeto da classe que é um OpenGL. Não consigo colocar de jeito nenhum a bendita janela do OpenGL no Painel.

Alguém me ajuda…

O erro:

Exception in thread AWT-EventQueue-0 net.java.games.jogl.GLException: Unable to lock surface

at net.java.games.jogl.impl.windows.WindowsOnscreenGLContext.lockSurface(WindowsOnscreenGLContext.java:155)

at net.java.games.jogl.impl.windows.WindowsOnscreenGLContext.makeCurrent(WindowsOnscreenGLContext.java:107)

at net.java.games.jogl.impl.GLContext.invokeGL(GLContext.java:162)

at net.java.games.jogl.GLCanvas.reshape(GLCanvas.java:105)

at java.awt.Component.setBounds(Unknown Source)

at java.awt.Component.resize(Unknown Source)

at java.awt.Component.setSize(Unknown Source)

at GraficoBarra.<init>(GraficoBarra.java:31)

at Janela.criaGraficoBarra(Janela.java:102)

at Janela.mouseClicked(Janela.java:122)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)
O código:

public void mouseClicked(MouseEvent me)

{

if ( me.getSource() == JLabel_1 )

{

this.criaGraficoLinha();

}

}

E a classe do OpenGL:

public class GraficoLinha implements GLEventListener

{

public GLCanvas canvas = null;
public GraficoLinha()
{
	GLCapabilities capabilities = new GLCapabilities();
	capabilities.setHardwareAccelerated(true);
	capabilities.setDoubleBuffered(true);
	
	canvas = GLDrawableFactory.getFactory().createGLCanvas(capabilities);
	
	canvas.addGLEventListener(this);
	
	canvas.setSize(400, 300);
	canvas.setVisible(true);
}
public void init(GLDrawable glDrawable)
{
	GL myGL = glDrawable.getGL();
	myGL.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
	myGL.glShadeModel(GL.GL_FASTEST);
}
public void display(GLDrawable glDrawable)
{
	GL myGL = glDrawable.getGL();
	myGL.glClear(GL.GL_COLOR_BUFFER_BIT);
}
            public void reshape(GLDrawable glDrawable, int arg1, int arg2, int arg3, int arg4)
{
	GL myGL = glDrawable.getGL();
	int width = canvas.getWidth();
	int height = canvas.getHeight();
	
	// Define a transformacao WINDOW x VIEWPORT
	// Define a vizualização da VIEWPORT
	myGL.glViewport(0,0,width,height);
	myGL.glMatrixMode(GL.GL_PROJECTION);
	myGL.glLoadIdentity();
	// Define a visualização da WINDOW
	myGL.glOrtho(0,width,0,height,-10,0);
}	
public void displayChanged(GLDrawable glDrawable, boolean arg1, boolean arg2)
{
	
}

Alguém faz de um outro jeito me avisa por favor!
Abraçosss

2 Respostas

brlima

E esse método criaGraficoLinha() que vc chama ao clicar, o que faz?
E eu achei estranho, pq ta dando excessao nessa class

at GraficoBarra.<init>(GraficoBarra.java:31)

???

rodrigo.achilles
Poxa, desculpa a demora da resposta e tinha esquecido de por o método criaGraficoLinha():

public void criaGraficoLinha()

{

GraficoLinha grafLinha = new GraficoLinha(); // achei o erro, está aqui.

painelSul.remove(JLabel_4);

painelSul.add(grafLinha.canvas);

this.pack();

}

Mas consegui concertar e colocar a criação do objeto em vez de ser no método coloquei lá em cima na classe.

Valeu mesmo pela atenção.
Abraços

Criado 10 de março de 2005
Ultima resposta 11 de mar. de 2005
Respostas 2
Participantes 2