2009-12-31 14 views
42

क्या कर्सर को छिपाने का कोई तरीका है (एक कर्सर के रूप में पारदर्शी छवि का उपयोग करने के अलावा)?एक स्विंग एप्लिकेशन में कर्सर को कैसे छिपाना है?

+0

क्या आप आगे विस्तार कर सकते हैं? जावा ऐप पर कर्सर? –

+0

हाँ..मैं कर्सर को छिपाना चाहता था, जब उपयोगकर्ता जेएफआरएएल के बाहर जेपीएनएल के बाहर माउस को इंगित करता था। – Jessy

उत्तर

61

ऐसा प्रतीत होता है कि Cursor कक्षा में "खाली" कर्सर शुरू नहीं होता है, इसलिए कोई Toolkit.createCustomCursor विधि का उपयोग करके एक नया "रिक्त" कर्सर परिभाषित कर सकता है।

यहाँ एक तरह से मैं कोशिश की है जो काम करने के लिए लगता है है:

// Transparent 16 x 16 pixel cursor image. 
BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB); 

// Create a new blank cursor. 
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(
    cursorImg, new Point(0, 0), "blank cursor"); 

// Set the blank cursor to the JFrame. 
mainJFrame.getContentPane().setCursor(blankCursor); 

संपादित

JFrame एक कर्सर के बिना समाप्त अंदर सब कुछ के बारे में टिप्पणी के बारे में, ऐसा लगता है कि Component एस जो JFrame में निहित हैं, कंटेनर (JFrame) के कर्सर को विरासत में ले जाएंगे, इसलिए यदि यह निश्चितहैमें कर्सर दिखाई देता है, किसी को वांछित कर्सर मैन्युअल रूप से सेट करना होगा।

JPanel p = ... 
// Sets the JPanel's cursor to the system default. 
p.setCursor(Cursor.getDefaultCursor()); 
+0

उत्तर कोबर्ड के जवाब के लिए आपका बहुत बहुत धन्यवाद। लेकिन मुझे एक और समस्या है। मैंने जेएफआरएएम बनाया जिसमें जेपीनल शामिल है, जो आकार जेएफआरएएम से छोटा है। मैं केवल कर्सर गायब हो जाता हूं जब माउस जेपीनेल के बाहर इंगित करता है। इसका मतलब है कि जब मैं कर्सर को मुख्य जेएफआरएम में अदृश्य के रूप में सेट करता हूं, तो कर्सर पूरी तरह से स्क्रीन पर गायब हो जाएगा? – Jessy

+0

हाय जेसी, मैंने जेपीनल को मेरे उत्तर में सिस्टम डिफ़ॉल्ट में सेट करने के तरीके के बारे में हिस्सा जोड़ा है। – coobird

+0

आपको बहुत धन्यवाद CooBird ... यह काम करता है !! :-) आपने मेरा दिन बनाया ... – Jessy

1

मैं इस समस्या का समाधान बहुत आसान:

उदाहरण के लिए, अगर है कि वहाँ एक JPanelJFrame में निहित है, तो एक ही है कि JPanel के कर्सर सिस्टम डिफ़ॉल्ट में Cursor.getDefaultCursor विधि का उपयोग कर सेट कर सकते हैं

final Timer cursorTimer = new Timer(2000, new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     getContentPane().setCursor(null); 
    } 
}); 
cursorTimer.start(); 

addMouseMotionListener(new MouseMotionAdapter() { 
    @Override 
    public void mouseMoved(MouseEvent e) { 
     getGlassPane().setCursor(Cursor.getDefaultCursor()); 
     cursorTimer.restart(); 
    } 
}); 
+0

अजीब, लेकिन कल यह काम करता है, लेकिन अब यह काम नहीं कर रहा है। मुझे इसे और अधिक समय परीक्षण करने की ज़रूरत है। –

3

मैक ओएस के तहत LWJGL का उपयोग करते समय आपको ऐसा करने की जरूरत है:

System.setProperty("apple.awt.fullscreenhidecursor","true"); 
3
frame.setCursor(frame.getToolkit().createCustomCursor(
      new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0), 
      "null")); 
4

टीएल; डी एडब्ल्यूटी टूलकिट अभी भी 2017 में बग किए गए हैं; इस प्रकार उचित समाधान

w.setCursor(w.getToolkit().createCustomCursor(
        new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB), 
        new Point(), 
        null)); 

पर कॉल करने के लिए है।


प्रति Javadoc page for createCustomCursor के रूप में,

एक नए कस्टम कर्सर वस्तु बनाता है। यदि प्रदर्शित करने के लिए छवि अमान्य है, तो कर्सर छुपाया जाएगा ( पूरी तरह से पारदर्शी बनाया गया है), और हॉटस्पॉट (0, 0) पर सेट किया जाएगा।

यह से है कि कि

w.setCursor(w.getToolkit().createCustomCursor(null, null, null)); 

चाल करना चाहिए का अनुसरण करेगी। अफसोस की बात है, इस मामले से संबंधित एक बग कोड द्वारा संभाला नहीं गया है, उदाहरण के लिए देखें http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7150089 (यह विशेष रूप से मैकोज़ के लिए है, लेकिन स्रोत ब्राउज़ करके आपको आसानी से पता चल सकता है कि प्लेटफार्म कार्यान्वयन के में में कोई वैधता नहीं है; tracker.isErrorAny() चेकिंग है, जो इस में यह काम नहीं करती है मामला), तो null या अमान्य Image गुजरने से बस एनपीईएक्स फेंकता है।

2

प्रलेखन में यह कहता है कि यदि छवि अमान्य है, तो यह डिफ़ॉल्ट रूप से पारदर्शी होगी इसलिए इसलिए एक खाली छवि को पार करने से एक पारदर्शी कर्सर होगा। लेकिन छवि के लिए विधि में null पास करने के परिणामस्वरूप अपवाद होगा।

Toolkit tk= getToolkit(); 
Cursor transparent = tk.createCustomCursor(tk.getImage(""), new Point(), "trans"); 
संबंधित मुद्दे