51

カーソルを非表示にする方法はありますか (透明な画像をカーソルとして使用する以外に)?

ユーザーがJFrameのJPanelの外にマウスを置いたときに、カーソルを非表示にしたい。

4

6 に答える 6

79

クラスには最初から「空白」カーソルがないように見えるため、メソッドCursorを使用して新しい「空白」カーソルを定義できます。Toolkit.createCustomCursor

これが私が試した1つの方法で、うまくいくようです:

// 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です。Component、目的のカーソルを手動で設定する必要があります。

たとえば、 に がJPanel含まれている場合、次のメソッドを使用してJFrame、そのカーソルをJPanelシステムのデフォルトに設定できます。Cursor.getDefaultCursor

JPanel p = ...
// Sets the JPanel's cursor to the system default.
p.setCursor(Cursor.getDefaultCursor());
于 2009-12-31T05:55:08.260 に答える
7

tl;dr AWT ツールキットは 2017 年になってもまだバグがあります。したがって、適切な解決策は呼び出すことです

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

代わりは。


のJavadocページにcreateCustomCursorよると、

新しいカスタム カーソル オブジェクトを作成します。表示する画像が無効な場合、カーソルは非表示になり (完全に透明になり)、ホットスポットは (0, 0) に設定されます。

そのことから、

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

トリックを行う必要があります。悲しいことに、コードで処理されないこのケースに関連するバグがあります。たとえば、 http://bugs.sun.com/bugdatabase/view_bug.do? bug_id=7150089を参照してください(これは MacOS 用ですが、ソースを参照することで、どのプラットフォームの実装にも最初のパラメータ値の有効性をチェックしていないことが簡単にわかるかもしれません;チェックImageがありますが、この場合はそれが機能しません) 。Toolkittracker.isErrorAny()nullImage

于 2012-05-21T14:31:51.950 に答える
3

Mac OS で LWJGL を使用する場合は、次のようにする必要があります。

System.setProperty("apple.awt.fullscreenhidecursor","true");
于 2011-10-12T00:10:13.230 に答える
3
frame.setCursor(frame.getToolkit().createCustomCursor(
            new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),
            "null"));
于 2011-11-21T13:30:09.330 に答える
2

ドキュメントでは、画像が無効な場合、デフォルトで透明になるため、空の画像を渡すと透明なカーソルになると書かれています。nullただし、画像のメソッドに渡すと例外が発生します。

Toolkit tk= getToolkit();
Cursor transparent = tk.createCustomCursor(tk.getImage(""), new Point(), "trans");
于 2012-07-20T14:43:20.390 に答える
1

私はこの問題をはるかに簡単に解決します:

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();
    }
});
于 2010-11-30T17:12:00.720 に答える