1

下のコードでカスタムカーソルを作成します。

Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage("C:/Users/Administrator/Desktop/gaea/core/ui/gaeawindow/src/si/xlab/gaea/core/ui/gaeawindow/HandCursor.gif");

// Somewhere in mouse pressed action

public void mousePressed(MouseEvent e)
    {
        Cursor cursor = toolkit.createCustomCursor(imageClose, new Point(12,12), "Hand");
        e.getComponent().setCursor(cursor);
    }

Macではカーソルが表示されますが、エミュレートされたWindows7では表示されません。それは増加して示され、それは醜いです。

これを修正するには、コードにどのような修正/トリックを適用する必要がありますか?これは一般的な問題ですか?

4

2 に答える 2

1

問題は、Windows が 32x32 のカーソルを必要とし、そうでない場合は画像をスケーリングすることです。Mac はより柔軟です。

最も簡単な解決策は、既存の 16x16 カーソルを透明ピクセルで 32x32 にパディングすることです。これは、両方のプラットフォームで機能します。

使用できます

Toolkit.getDefaultToolkit().getBestCursorSize(w,h)

特定のサイズがサポートされているかどうかを確認します。

詳細について は、MS サイトへのリンクもあるhttp://forums.sun.com/thread.jspa?threadID=5424409を参照してください。

于 2010-10-14T22:02:53.927 に答える
0

おそらく、エミュレートされた Windows 7 はイメージ ファイルを見つけることができません。getClass().getResource() でこのファイルをロードできるように、イメージ ファイルを Java ファイルの隣のクラスパスに移動する必要があります。

エミュレートされた Windows 7 と Mac の両方で動作するはずです。

    public class CursorTest extends JFrame {
    public CursorTest() {

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        URL url = getClass().getResource("/si/xlab/gaea/core/ui/gaeawindow/HandCursor.gif");

        Image image = null;
        try {
            image = ImageIO.read(url.openStream());
        } catch (IOException e) {
            e.printStackTrace();
        }

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Cursor cursor = toolkit.createCustomCursor(image, new Point(12, 12),
                "Hand");
        setCursor(cursor);

        setSize(new Dimension(200, 200));
        setVisible(true);
    }
}
于 2010-10-07T18:50:01.133 に答える