2008-10-10 16 views
7

मैं जावा में एक साधारण 2 डी गेम इंजन पर काम कर रहा हूं, और एफएसईएम, बफर रणनीतियों, और इसी तरह के साथ कोई परेशानी नहीं है; मेरा मुद्दा माउस कर्सर के साथ है। विंडो मोड में, मैं पूरी तरह से पारदर्शी कर्सर सेट करने के लिए अपने जेएफआरएएम से setCursor() का उपयोग कर माउस कर्सर, कोई समस्या नहीं छिपा सकता हूं। हालांकि, डिवाइस पर कॉल करने के बाद .सेटफुलस्क्रीनविंडो (यह) एफएसईएम में जाने के लिए, माउस कर्सर वापस आता है, और बाद में कॉल को कर्सर() को अपने रिक्त कर्सर पर सेट करने के लिए कोई प्रभाव नहीं पड़ता है। कॉलिंग डिवाइस.सेटफुलस्क्रीनविंडो (शून्य) मुझे कर्सर से फिर से छुटकारा पाने की अनुमति देता है - यह केवल तभी होता है जब मैं एफएसईएम में हूं कि मैं इससे छुटकारा नहीं पा सकता हूं।मैं पूर्ण-स्क्रीन विशेष मोड में माउस कर्सर से कैसे छुटकारा पा सकता हूं?

मैं जेडीके 6 के तहत काम कर रहा हूं, लक्ष्य मंच जेडीके 5+ है।

अद्यतन: मैं कुछ और परीक्षण किया है, और की तरह इस मुद्दे जावा 6u7 साथ w/जावा 6u7, लेकिन Windows XP SP3 के तहत नहीं MacOS X 10.5 के तहत होता है ऐसा लगता है। तो, यह संभवतः जेवीएम के मैक संस्करण में एक बग हो सकता है।

उत्तर

4

:

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

यह एक है ऐप्पल-प्रोप्रायटरी सिस्टम प्रॉपर्टी जो माउस कर्सर को छुपाती है जब कोई एप्लिकेशन पूर्ण-स्क्रीन मोड में होता है। यह एकमात्र तरीका है जिसे मैंने इसे ठीक करने के लिए पाया है।

+0

यह मेरे लिए काम नहीं कर रहा था। – tristan2468

+0

@ tristan2468 आपके साथ क्या समस्या है? जावा का कौन सा संस्करण और मैकोज़ का संस्करण क्या है? आप देखेंगे कि यह अब 5 साल का है और पुराना हो सकता है। – Adrian

+0

यह टिप्पणी की उम्र हो सकती है। यह कर्सर छुपा नहीं था। माउंटेन शेर 10.8.3, जावा: जावा संस्करण "1.6.0_43" जावा (टीएम) एसई रनटाइम पर्यावरण (1.6.0_43-बी 01-447-11M4203 का निर्माण) जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम (20.14- बी 01-447, मिश्रित मोड)। – tristan2468

0

मुझे नहीं पता कि यह ज्ञान लागू होता है लेकिन पुराने वीबी 6 ऐप में मुझे एक ही समस्या थी और मैंने इसे कर्सर को स्क्रीन से बाहर ले जाने से छुटकारा दिलाया और इसे बहुत बड़े मूल्य दिए।
उम्मीद है कि यह मदद करता है।

+0

समस्या है, मैं माउस इनपुट की जरूरत है, मैं सिर्फ छुपाना चाहते हैं स्क्रीन पर कर्सर छवि। – Adrian

+0

क्षमा करें, आपको गलत समझा :( –

5

एक डेवलपर को पारदर्शी जीआईएफ से एक पिक्सेल कर्सर बनाकर इसके चारों ओर एक रास्ता मिला।

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

मुझे पता है तुम करने की कोशिश की है कि है, लेकिन उनके विशेष रूप से पूर्ण स्क्रीन मोड के मुद्दे को संबोधित किया जाता है, बिल्कुल के रूप में आप कहते हैं, तो शायद वहाँ कुछ वह किया है कि आप नहीं है है।

+0

यह मैं जितना कम या कम कर रहा था, लेकिन मैं अपनी खुद की 1-पिक्सेल पारदर्शी कर्सर छवि को ऑन-द-फ्लाई बना रहा था। मैंने इसे पूर्व-निर्मित 1px पारदर्शी जीआईएफ का उपयोग करने के लिए स्विच किया, और यह मदद नहीं की - अभी भी विंडो मोड में काम करता है लेकिन मैं कर्सर को पूर्ण-स्क्रीन मोड में नहीं हटा सकता। – Adrian

+1

शायद यह महत्वपूर्ण है कि उसने एफएसईएम दर्ज करने के बाद ही कर्सर बनाया/सेट किया। उदाहरण विंडोज़ पर भी था, कर्सर बहुत मंच हैं विशिष्ट, तो आप शायद सही हैं। – davenpcj

+0

"हो सकता है कि यह महत्वपूर्ण है कि उसने एफएसईएम दर्ज करने के बाद ही कर्सर बनाया/सेट किया" मैं पुष्टि करता हूं कि सेट * के बाद * सेटफुलस्क्रीनविंडो काम करता है लेकिन पहले कॉल नहीं करता है। –

0

यदि आप केवल विंडोज़ पर चल रहे हैं, तो ऐसा लगता है कि आपको जेएनआई के माध्यम से शोक्रसर (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); 
+0

यह लगभग बिल्कुल ठीक है मैं कर रहा हूं, और जब यह विंडो मोड में पूरी तरह से काम करता है, यह पूर्ण-स्क्रीन मोड में काम नहीं करता है। कर्सर तब तक दिखाई देता है जब तक कि मैं पूर्ण-स्क्रीन मोड नहीं छोड़ता, फिर मैं इसे फिर से छिपाने में सक्षम हूं, usi आपके द्वारा वर्णित एक ही तकनीक एनजी। – Adrian

0
विशेष रूप से अपने मैक समस्या के लिए

, JNI के माध्यम से आप निम्न का उपयोग कर सकता है: मुझे लगता है कि मैं अंत में समाधान मिल गया है

Quartz Display Services Reference - CGDisplayHideCursor

1

यहाँ क्या मेरे लिए काम कर रहा है है:

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 पर यह परीक्षण नहीं किया। लेकिन जब मैंने सामान्य तरीकों का इस्तेमाल किया तो मैं कर्सर को ब्लैक बॉक्स के रूप में प्राप्त कर रहा था, इसलिए मैं उपरोक्त कोड का उपयोग एक पारदर्शी बॉक्स बनाने के बजाय करता हूं और इसे कर्सर के रूप में सेट करता हूं। बेशक आपको इस छुपे हुए कर्सर को सेट करने के लिए एडब्ल्यूटी ऑब्जेक्ट (जैसे आपके ऐप के फ़्रेम) पर सेट कर्सर विधि का उपयोग करना होगा।यहाँ मेरी hideMouse विधि है ('fr' मेरी फ्रेम है):

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

एक कस्टम अदृश्य कर्सर बनाना का प्रयास करें:

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); 
+0

बहुत अच्छा। यह काम। – tristan2468

संबंधित मुद्दे

 संबंधित मुद्दे