2010-04-12 17 views
9

मैं जेपीनेल के लिए एक कस्टम कर्सर सेट करने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं, लेकिन जब मैं कोड को चलाता हूं तो मैं कर्सर के लिए सेट की गई छवि को बढ़ाता हूं। क्या उपयोगकर्ता परिभाषित कर्सर आकार सेट करने का कोई तरीका है?स्विंग में कर्सर के लिए कस्टम आकार कैसे सेट करें?

Toolkit toolkit = Toolkit.getDefaultToolkit(); 
BufferedImage erasor=new BufferedImage(10,10, BufferedImage.TYPE_INT_RGB); 
Graphics2D g2d=(Graphics2D) erasor.createGraphics(); 
g2d.setPaint(Color.red); 
g2d.drawRect(e.getX(),e.getY() ,10, 10); 
toolkit.getBestCursorSize(10, 10); 
Cursor mcursor=toolkit.createCustomCursor(erasor, new Point(10,10), "Eraser"); 
setCursor(mcursor); 

उत्तर

5

"मानक" आकार और पारदर्शी पृष्ठभूमि की छवि का उपयोग करना एक आसान समाधान होगा।

+0

टूलकिट टूलकिट = Toolkit.getDefaultToolkit(); छवि eraser = toolkit.getImage ("images/eraserpointer.jpg"); ग्राफिक्स 2 डी जी 2 डी = (ग्राफिक्स 2 डी) erasor.createGraphics(); toolkit.getBestCursorSize (10, 10); कर्सर mcursor = toolkit.createCustomCursor (इरेज़र, नया प्वाइंट (10,10), "इरेज़र"); सेट कर्सर (mcursor); हां, मैंने उपर्युक्त कोड के साथ इसे आजमाया, यह छवि को कुछ पूर्व परिभाषित आकार में बढ़ा रहा है। यदि कोई अन्य दृष्टिकोण है तो कृपया मुझे एक साधारण कोड स्निपेट – swift

+0

के साथ उत्तर दें यदि आप एक कस्टम आकार के कर्सर का उपयोग कर सकते हैं तो यह शायद प्लेटफार्म निर्भर है। इसलिए मेरा सुझाव है कि आप छवि फ़ाइल (छवियों/eraserpointer.jpg) को 32x32 (विंडोज़ में) बनाएं और बस इसके 10x10 कोने को पेंट करें और बाकी पारदर्शी छोड़ दें। बेशक आपको एक फ़ाइल प्रारूप का उपयोग करने की आवश्यकता है जो पारदर्शिता (पीएनजी या जीआईएफ) का समर्थन करता है।अन्य प्लेटफार्मों पर .. मुझे लगता है कि आपको अलग-अलग प्लेटफॉर्म के लिए अलग-अलग आकार के चित्र होना चाहिए। – fish

5

विंडोज़ केवल आकार 32x32 पिक्सल के कर्सर को अनुमति देते हैं, इसलिए यदि आप एक और आकार चाहते हैं तो आपको इसके आसपास काम करना होगा।

32x32 छवि के साथ छोटे आकार का उपयोग createCustomCursor() प्राप्त करने के लिए जहां अवांछित पिक्सेल पारदर्शी हैं। यदि आप BufferedImage.TYPE_INT_ARGB का उपयोग करते हैं तो आप पिक्सल पारदर्शी बना सकते हैं।

  • कि पूरी तरह से पारदर्शी है एक कस्टम कर्सर बनाएँ:

    एक बड़ा कर्सर मेरा मानना ​​है कि यह काम करेगा बनाने के लिए।

  • कर्सर की स्थिति प्राप्त करने के लिए mouseMotionListener का उपयोग करें।

  • वास्तविक (पारदर्शी) कर्सर की स्थिति पर अपनी कर्सर छवि बनाएं।

2

आप रनटाइम पर कर्सर आकार निर्धारित कर सकते हैं, इसे 'सर्वश्रेष्ठ आकार' द्वारा नियंत्रित किया जाता है।

आयाम aBestSize = Toolkit.getDefaultToolkit()। GetBestCursorSize (0, 0);

फिर आकार आप सबसे अच्छा आकार का एक पारदर्शी बफ़र छवि पर चाहते हैं कर्सर छवि Blit (Windows के लिए इस 32x32 है), यह अब बदल दिया जाएगा।

2

विंडोज में एक अपमान कर्सर है, जो हमेशा 32x32 पिक्सल होता है। आप एक छवि आकार को एक अन्य आकार के साथ सेट कर सकते हैं, लेकिन विंडोज़ इस छवि को 32x32 पिक्सेल में आकार दे सकती हैं, जो अन्य दुष्प्रभावों को ट्रिगर कर सकती है, खासकर जब आपकी छवि वर्गबद्ध नहीं होती है।

आप इस उदाहरण में एक पारदर्शी छवि के साथ कामकाज कर सकते हैं।

/** 
    * Create a transparent cursor with a given frame. Note: The name of the 
    * cursor is <code>Trans</code>. 
    * <br> 
    * <b>Note</b>: The maximal size for the cursor is 32x32 pixel under windows. 
    * Technically it is possible to create a cursor bigger than 32x32 pixel, but this method must run under windows 
    * and so the size is limited to 32 pixel. 
    * 
    * @param size the size of the frame (horizontal/vertical) 
    * <br> 
    * <b>Note</b>: maximal size is 32 pixel. 
    * @param frameThickness the thickness of the frame 
    * @param frameColor the color of the frame 
    * @return a cursor which is a frame with the given size and color. 
    */ 

    public static synchronized Cursor createTransparentCursor(int size, int frameThickness, Color frameColor) { 

      final int cursourSize = size + (2 * frameThickness); 
      System.out.println("cursourSize: "+cursourSize); 

      final BufferedImage bufferedImage = new BufferedImage(32 + 2, 32 + 2, BufferedImage.TYPE_INT_ARGB); 
      final Graphics graphic = bufferedImage.getGraphics(); 
      final Color colTrans = new Color(0, 0, 0, 0); 
      for(int i = 0 ; i < cursourSize ; i++){ 
        for(int j = 0 ; j < cursourSize ; j++){ 
          if(i <= frameThickness || i > cursourSize - frameThickness -1 || j <= frameThickness 
              | j > cursourSize - frameThickness - 1){ 
            graphic.setColor(frameColor); 
          } 
          else{ 
            graphic.setColor(colTrans); 
          } 
          graphic.fillRect(i, j, 1, 1); 
        } 
      } 
      System.out.println("Buffered size:" +bufferedImage.getHeight() +"/"+ bufferedImage.getWidth()); 
      final Point hotSpot = new Point(cursourSize/2, cursourSize/2); 
      return Toolkit.getDefaultToolkit().createCustomCursor(bufferedImage, hotSpot, "Trans"); 
    } 

क्षमा करें, लेकिन मैं इस तथ्य की एक छवि अपलोड नहीं कर सकता। मेरे पास पर्याप्त प्रतिष्ठा नहीं है। ;/

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