2017-04-14 12 views
1

저는 Java에서 새로 왔으며 이미지를 커서로 설정하는 데 문제가 있습니다. BufferedImageGraphics.drawImage을 사용하고 있지만 이미지의 색만 그리고 전체 png 이미지는 그리지 않습니다.이미지를 커서로 설정하면 왜 작동하지 않습니까?

/*The images List*/ 
iconsBet.add(ImageIO.read(getClass().getResource("/resources/ChipType"+ String.valueOf(maxChipBet+1) +".png"))); 
/*The images List*/ 

BufferedImage output = new BufferedImage(iconsBet.get(0).getWidth(), iconsBet.get(0).getHeight(), BufferedImage.TYPE_INT_ARGB); 
Graphics graphicsCursorIcon = output.getGraphics(); 

int count = 0; 
for(BufferedImage icon : iconsBet) 
{     
    graphicsCursorIcon.drawImage(icon, 0, count*10, null); 
    count++; 
} 

graphicsCursorIcon.dispose(); 
Toolkit toolkit = Toolkit.getDefaultToolkit(); 
Cursor c = toolkit.createCustomCursor(output , new Point(mainPanel.getX(), mainPanel.getY()), "img"); 
mainPanel.setCursor(c); 

이미지 : This is one image from the group of images that I'm using

이 프로그램은 빨간색 원이 아닌 PNG 이미지를 그릴

여기 내 코드입니다.

이미 모든 BufferedImage 유형을 사용해 보았지만 작동하지 않습니다. 도와 주시겠습니까? 작동하게하려면 어떻게해야합니까?

+0

, 당신은 32 × 32의 커서 크기로 제한 할 수 있습니다 -이 변경되었을 수 있지만, 당신은 서로의 상단에 이미지를 그리는 윈도우 7에서/자바 7 – MadProgrammer

+0

사건이었다. 투명성이 확실합니까? 마지막 이미지가 이전 이미지를 완전히 오버 페인트 할 수 있습니다. –

+0

1) 더 빨리 도움을 받으려면 [MCVE] 또는 [짧은, 자기 포함, 올바른 예] (http://www.sscce.org/)를 게시하십시오. 2) 예를 들어 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지에 핫 링크하는 것입니다. 이 경우 질문에 포함 된 이미지에 핫 링크 할 수 있습니다. –

답변

2

을 시도합니다. 창에

import java.awt.*; 
import java.awt.image.*; 
import java.io.IOException; 
import javax.imageio.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.net.URL; 

public class CustomImageCursor { 

    private JComponent ui = null; 

    CustomImageCursor() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(40, 400, 40, 40)); 

     try { 
      BufferedImage bi = ImageIO.read(
        new URL("https://i.stack.imgur.com/b89MA.png")); 
      Toolkit toolkit = Toolkit.getDefaultToolkit(); 
      Cursor c = toolkit.createCustomCursor(bi, new Point(0, 0), "img"); 
      ui.setCursor(c); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       CustomImageCursor o = new CustomImageCursor(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
5

난 당신이 Toolkit.createCustomCursor(Image cursor, Point hotSpot, String name)의 두 번째 인수 오해 의심 :

hotSpot - 큰 커서의 핫 스포트의 X 및 Y를; 핫스팟 값은 커서 이미지의 왼쪽 위 모서리를 기준으로 의미

hotspot getBestCursorSize

에 의해 반환 된 치수보다 작아야합니다, 하지 패널의 왼쪽 상단 모서리에. 그래서,
new Point(mainPanel.getX(), mainPanel.getY()) 

대신

그냥 작은 크기로 커서를 축소하지만이 MCVE는, 여기서 일하는

new Point(0, 0) 
+0

대단히 고마워, 네 말이 맞아, 내가 잘못 해석 한거야. 이미 문제를 해결했지만 문제는 아닙니다. 버튼 이미지를 복사하여 커서에 그려야하기 때문에 전체 PNG 이미지가 아닌 색상이있는 원 만 그립니다. 관찰 해 주셔서 대단히 감사합니다. –

+0

@DarthHollow 그러면 이미지에 여전히 문제가 있습니다. 좋은 답변을 얻으려면 질문에이 내용을 추가해야합니다. –

+0

조언을 주셔서 감사합니다. 이미 질문에 이미지를 넣었습니다. –