Подтвердить что ты не робот

Как скрыть курсор в приложении Swing?

Есть ли способ скрыть курсор (кроме использования прозрачного изображения в качестве курсора)?

4b9b3361

Ответ 1

Похоже, что класс Cursor не имеет пустого курсора, поэтому можно было бы определить новый "пустой" ", используя метод Toolkit.createCustomCursor.

Вот один из способов, с которым я попытался работать:

// 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);

Edit

Что касается комментария ко всему, что находится внутри JFrame, заканчивающегося без курсора, кажется, что Component, который содержится в JFrame, наследует курсор контейнера (JFrame), поэтому, если требуется, чтобы определенный Component отображал курсор, нужно вручную установить желаемый курсор.

Например, если в JFrame содержится JPanel, тогда можно установить курсор этого JPanel в системную умолчанию, используя Cursor.getDefaultCursor:

JPanel p = ...
// Sets the JPanel cursor to the system default.
p.setCursor(Cursor.getDefaultCursor());

Ответ 2

tl; dr AWT Toolkits все еще прослушивается в 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, но, просматривая исходный код, вы можете легко обнаружить, что нет проверки значения 1-го параметра Image действительность в любой из реализаций платформы Toolkit, там tracker.isErrorAny() проверка, которая в этом случае не выполняет эту работу), поэтому передача null или недействительная Image просто бросает NPEx.

Ответ 3

При использовании LWJGL в Mac OS вам нужно сделать это:

System.setProperty("apple.awt.fullscreenhidecursor","true");

Ответ 4

frame.setCursor(frame.getToolkit().createCustomCursor(
            new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),
            "null"));

Ответ 5

Я решу эту проблему гораздо проще:

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();
    }
});

Ответ 6

В документации говорится, что если изображение недействительно, то по умолчанию оно будет прозрачным, поэтому передача пустого изображения приведет к прозрачному курсору. Но передача null в метод для изображения приведет к исключению.

Toolkit tk= getToolkit();
Cursor transparent = tk.createCustomCursor(tk.getImage(""), new Point(), "trans");