Есть ли в Swing способ извлечь предопределенное изображение курсора мыши из набора инструментов? - PullRequest
3 голосов
/ 27 августа 2011

Я бы хотел создать пользовательский курсор справки, "поставив на карту" встроенный курсор мыши по умолчанию со знаком вопроса, когда пользователь наводит курсор на объект, на который можно щелкнуть для получения контекстно-зависимой справки.Мне бы хотелось, чтобы это хорошо работало на разных платформах / внешне (например, чтобы они выглядели согласованно с белой мышью Windows и черной мышью Mac). Есть ли способ получить изображение курсора из текущего набора инструментов, чтобыЯ мог бы создать комбинированное изображение, чтобы установить его в качестве курсора?

Этот вопрос указывает на то, что информация не может быть получена из объекта Cursor.Там также есть комментарий, в котором предлагается ловить рыбу в JRE, который я тоже немного попробовал: там и в изображениях Google я не нашел доступных графических файлов для грабежа

Альтернативой будетдобавить слушателя mouseMoved и нарисовать вручную немного справа от курсора (полагаю, на родительском объекте, чтобы избежать ограничения на границах?), но меня немного беспокоили накладные расходы, и в начальных исследованиях это выглядело оченьсложно.Я бы взял и другие предложения по поиску или созданию хорошего справочного курсора.(Лучшая встроенная рука, но она не говорит «помочь» так ясно, как знак вопроса.)

Ответы [ 3 ]

3 голосов
/ 27 августа 2011

В общем, нет.Большинство курсоров принадлежат операционной системе хоста платформы, но некоторые живут в $JAVA_HOME/lib/images/cursors/, например:

$ ls -1 lib/images/cursors/
cursors.properties
invalid32x32.gif
motif_CopyDrop32x32.gif
motif_CopyNoDrop32x32.gif
motif_LinkDrop32x32.gif
motif_LinkNoDrop32x32.gif
motif_MoveDrop32x32.gif
motif_MoveNoDrop32x32.gif
2 голосов
/ 27 августа 2011

Я не уверен, что это лучшее решение в вашем случае, потому что хороший встроенный курсор мыши должен быть лучшим. В любом случае вы можете использовать слушателей мыши и рисовать на стекле в соответствии с положением мыши. Вот пример чертежа на стекле.

0 голосов
/ 15 сентября 2014

Java использует системный курсор по умолчанию, за исключением курсора Drag-and-Drop, где он использует свои собственные курсоры.

Так что для каждого курсора , кроме DnD , обратитесь к Извлечь изображение курсора в Java .JNA должен использоваться и может быть легко добавлен в любой проект Maven.

Для курсоров DnD решение от trashgod хорошее.Они могут быть загружены следующим образом:

private static Path customSystemCursorPath = null;

public static Image loadDnDCursorImage(String cursorName) throws IOException {

    if (customSystemCursorPath == null) {
        String jhome = System.getProperty("java.home", "????");
        customSystemCursorPath = Paths.get(jhome, "lib", "images", "cursors");
    }

    // TODO change this to retrieve the cursor filename from  cursors.properties
    cursorName = "win32_" + cursorName + "32x32.gif";

    Path cursorPath = customSystemCursorPath.resolve(cursorName);

    Image image = ImageIO.read(cursorPath.toFile());
    return image;
}
...