전체 화면 독점 모드에서 마우스 커서를 어떻게 제거합니까?
-
08-07-2019 - |
문제
나는 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를 통해 다음을 사용할 수 있습니다.