كيف يمكنني التخلص من الماوس في شاشة كاملة حصرية الوضع ؟

StackOverflow https://stackoverflow.com/questions/191592

سؤال

أنا أعمل على 2D بسيطة محرك اللعبة في جاوة ، وعدم وجود مشاكل مع FSEM العازلة استراتيجيات وهلم جرا ؛ مشكلتي هي مع الماوس.في وضع إطارات أستطيع إخفاء مؤشر الماوس, لا مشكلة, باستخدام setCursor() من JFrame إلى مجموعة بالكامل-شفاف المؤشر.ومع ذلك ، بعد استدعاء الجهاز.setFullScreenWindow(هذا) للذهاب إلى FSEM الماوس المؤشر يعود ، الاستدعاءات التالية إلى setCursor() تعيين مرة أخرى إلى بلدي فارغة المؤشر ليس لها أي تأثير.داعيا الجهاز.setFullScreenWindow(null) يسمح لي للتخلص من المؤشر مرة أخرى - انها فقط بينما أنا في FSEM التي لا أستطيع التخلص منه.

أنا أعمل في إطار JDK 6, الهدف الأساسي هو JDK 5+.

تحديث: لقد فعلت بعض التجارب و يبدو أن تحدث هذه المشكلة تحت MacOS X 10.5 w/Java 6u7 ، ولكن ليس تحت ويندوز XP SP3 مع جافا 6u7.لذا يمكن أن يكون الخلل في نسخة ماك من JVM.

هل كانت مفيدة؟

المحلول 3

أعتقد أنني أخيرا وجدت الحل:

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

هذا هو تفاحة-نظام ملكية العقار الذي يخفي الماوس عندما يكون هناك تطبيق في وضع ملء الشاشة.إنها الطريقة الوحيدة التي وجدتها لإصلاح ذلك.

نصائح أخرى

حاول إنشاء مخصص غير مرئية المؤشر:

    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");

منح, لم أجربها على ماك (بعد), Windows فقط.ولكن عندما تستخدم الطرق الشائعة أنا كان الحصول على المؤشر الأسود ، لذلك يمكنني استخدام رمز فوق إنشاء صندوق شفاف وتعيينه المؤشر بدلا من ذلك.بالطبع لديك لاستخدام setCursor الأسلوب على AWT الكائن (مثل التطبيق الخاص بك الإطار) لتعيين هذه hiddenCursor.هنا هو بلدي hideMouse طريقة ('fr' هو الإطار):

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

أنا لا أعرف إذا كانت هذه المعرفة ينطبق ولكن في القديم VB6 التطبيق كان عندي نفس المشكلة و تخلصت من ذلك تحريك المؤشر خارج الشاشة يعطيها بعض القيم الكبيرة.
آمل أن يساعد.

إذا كنت تعمل فقط على ويندوز ، يبدو أنك سوف تحتاج إلى الاتصال ShowCursor(كاذبة) من خلال JNI.على الأقل لجعل المؤشر إخفاء كاملة.

هنا بعض التعليمات البرمجية التي يخلق 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 يمكنك استخدام الإجراءات التالية:

الكوارتز عرض الخدمات المرجعية - CGDisplayHideCursor

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top