Помогите, не работает setCursor( ) в приложении Java на OpenGL

Модератор: Absurd

Ответить
Grom_UA
Сообщения: 3
Зарегистрирован: 13 май 2013, 21:52

26 дек 2014, 23:16

Делаю 3d движок на JAVA OpenGL около года. Взялся вчера оформлять меню, попробовал заменить указатель курсора своим изображением, ничего не получается. В самом редакторе, который работает исключительно на Java через paintComponent ( ) все выходит - могу удалить курсор, могу заменить. Но когда перехожу в окно JPanel к которому подключен openGL курсор остается стандартным.
Я вырезал весь код и упростил как мог программу, чтобы оставить саму схему, код рабочий. Подскажите с курсором если кто в курсе.

Код: Выделить всё

package jaga;
import static org.lwjgl.opengl.GL11.*;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.lwjgl.opengl.*;
import org.lwjgl.*;

public class JaGa
{		
	public static void main(String[] args) 
	{       
            new JaGa();
	}
	
	
	public JaGa()
	{
	       frame=new Andrew();
	       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	       frame.setVisible(true);
	}
  
  static Andrew frame; 
  
  class Andrew extends JFrame
  {
 	private static final long serialVersionUID = 1L;

 		public Andrew()
 		{
 		    setSize(1200,800);
 		    setTitle("Jag Editor");
 		    Engine engine=new Engine();
 		    Container pane=getContentPane();
 		    pane.add(engine);
 		}
  }

  class Engine extends JPanel
 {	
    private static final long serialVersionUID = 1L;
	Cursor menuCursor;

	public Engine()
	{
		try {
			  Display.setDisplayMode(new DisplayMode(1280,800));
			  Display.setTitle("Jag Engine");
			  Display.create();

		    } catch (LWJGLException e) { e.printStackTrace(); }
                                                                                	
			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();
			glMatrixMode(GL_MODELVIEW);		
			glEnable(GL_TEXTURE_2D);
			glLoadIdentity(); 
			glOrtho(0,1280,800,0,1,-1); 
			glEnable(GL_BLEND);
			glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
			glDisable(GL_DEPTH_TEST);

		    try { menuCursor=Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("res/texture/menu/shotDouble.png"), new Point(0, 0), "menuCursor"); } catch (Exception c) {  } 			    
            try { this.setCursor(menuCursor); } catch (Exception c) {  }
			
			  while (!Display.isCloseRequested())
			  {
				    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
		            Display.update();
					Display.sync(60); 
			  }
	  
	  Display.destroy();			
	}
 }
}
Ответить