Есть ли способ скрыть курсор (кроме использования прозрачного изображения в качестве курсора)?
Как скрыть курсор в приложении Swing?
Ответ 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");