문제

나는 Java의 간단한 2D 게임 엔진을 연구하고 있으며 FSEM, 버퍼 전략 등에 문제가 없습니다. 내 문제는 마우스 커서입니다. 창 모드에서는 JFrame에서 setCursor ()를 사용하여 전액 트랜지즈 한 커서를 설정하여 마우스 커서를 숨길 수 있습니다. 그러나 Device.setfullscreenwindow (this)를 FSEM으로 이동 한 후 마우스 커서가 돌아와서 SetCursor ()로 호출하여 공백 커서로 다시 설정하는 데 영향을 미치지 않습니다. Calling Device.setfullscreenWindow (null)를 사용하면 커서를 다시 제거 할 수 있습니다.

JDK 6에서 일하고 있으며 대상 플랫폼은 JDK 5+입니다.

업데이트: 더 많은 테스트를 수행 했으며이 문제는 MacOS X 10.5 W/Java 6U7에서 발생하지만 Java 6U7의 Windows XP SP3에서는 그렇지 않습니다. 따라서 JVM의 MAC 버전에서 버그 일 수 있습니다.

도움이 되었습니까?

해결책 3

마침내 해결책을 찾았습니다.

System.setProperty("apple.awt.fullscreenhidecursor","true");

응용 프로그램이 전체 화면 모드에있을 때 마우스 커서를 숨기는 Apple-Verry System 속성입니다. 내가 고치는 유일한 방법입니다.

다른 팁

사용자 정의 보이지 않는 커서를 만들어보십시오.

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Point hotSpot = new Point(0,0);
    BufferedImage cursorImage = new BufferedImage(1, 1, BufferedImage.TRANSLUCENT); 
    Cursor invisibleCursor = toolkit.createCustomCursor(cursorImage, hotSpot, "InvisibleCursor");        
    setCursor(invisibleCursor);

한 개발자는 투명한 GIF에서 하나의 픽셀 커서를 만들어 주변의 길을 찾았습니다.

http://sevensoft.livejournal.com/23460.html

나는 당신이 그것을 시도했음을 알고 있지만, 그의 말과 정확히 정확히 전체 화면 모드의 문제를 구체적으로 다루고 있기 때문에 아마도 당신이하지 않은 일이 있었을 것입니다.

다음은 저를 위해 작동 한 것입니다.

Toolkit toolkit = Toolkit.getDefaultToolkit();

// get the smallest valid cursor size
Dimension dim = toolkit.getBestCursorSize(1, 1);

// create a new image of that size with an alpha channel
BufferedImage cursorImg = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_ARGB);

// get a Graphics2D object to draw to the image
Graphics2D g2d = cursorImg.createGraphics();

// set the background 'color' with 0 alpha and clear the image
g2d.setBackground(new Color(0.0f, 0.0f, 0.0f, 0.0f));
g2d.clearRect(0, 0, dim.width, dim.height);

// dispose the Graphics2D object
g2d.dispose();

// now create your cursor using that transparent image
hiddenCursor = toolkit.createCustomCursor(cursorImg, new Point(0,0), "hiddenCursor");

물론, 나는 Mac (아직), Windows 만 테스트하지 않았습니다. 그러나 공통 메소드를 사용했을 때 커서를 블랙 박스로 가져 왔기 때문에 투명한 상자 위의 코드를 사용하여 대신 커서로 설정합니다. 물론 AWT 객체 (예 : 앱 프레임)의 SetCursor 메소드를 사용 하여이 HiddenCursor를 설정해야합니다. 여기 내 Hidemouse 메소드가 있습니다 ( 'fr'는 내 프레임) :

public void hideMouse(boolean hide) {
    if(hide) {
        fr.setCursor(hiddenCursor);
    } else {
        fr.setCursor(Cursor.getDefaultCursor());
    }
}

이 지식이 적용되는지는 모르겠지만 오래된 VB6 앱에서는 같은 문제가 있었고 화면에서 커서를 옮기는 것을 제거했습니다.
도움이되기를 바랍니다.

Windows에서만 실행중인 경우 JNI를 통해 ShowCursor (False)를 호출 해야하는 것 같습니다. 적어도 커서를 완성하게합니다.

다음은 1x1 커서를 만드는 코드입니다. 나는 여전히 1x1 커서를 얻지 만 나를 위해 작동합니다.

 Toolkit toolkit = Toolkit.getDefaultToolkit();
 Dimension dim = toolkit.getBestCursorSize(1,1);
 transCursor = toolkit.createCustomCursor(gc.createCompatibleImage(dim.width, dim.height),
     new Point(0, 0), "transCursor");
 ((Component)mainFrame).setCursor(transCursor);

특히 MAC 문제의 경우 JNI를 통해 다음을 사용할 수 있습니다.

Quartz Display Services Reference -CGDISPLAYHIDECURSOR

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top