2017-04-14 1 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のカーソルサイズに制限されている - それは変わったかもしれないが、それはあなたが互いの上にあなたのイメージを描画しているWindows 7/Javaの7の下ケース – MadProgrammer

+0

ました。 透明性があると思いますか? 最後のイメージが以前のイメージをすべて完全に上書きすることがあります。 –

+0

1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)画像を取得する方法の1つは、[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。この場合、質問に埋め込まれている画像にホットリンクすることがあります。 –

答えて

2

を試してみてください。 Windows上で

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

アドバイスをありがとう、私はすでに質問に画像を入れました。 –

関連する問題