Java - пользовательский курсор отличается в разных операционных системах - PullRequest
1 голос
/ 03 октября 2010

Я создаю пользовательский курсор с нижним кодом:

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, как и должно быть, но в эмулированной Windows 7 это не так. Показано увеличено и некрасиво.

Какие исправления / хитрости я должен применить к своему коду, чтобы это исправить? Это общая проблема?

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Проблема в том, что Windows хочет курсоры 32x32 и будет масштабировать ваше изображение, если это не так.Mac более гибок.

Самое простое решение - это разместить существующие курсоры 16x16 до 32x32 с прозрачными пикселями;тогда это будет работать на обеих платформах.

Вы можете использовать

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

, чтобы увидеть, поддерживается ли данный размер.

Для получения дополнительной информации см .: http://forums.sun.com/thread.jspa?threadID=5424409, который также имеет ссылку на сайт MS.

0 голосов
/ 07 октября 2010

Вероятно, эмулированная Windows 7 не может найти файл изображения. Вы должны переместить файл изображения в classpath, рядом с вашими java-файлами, чтобы вы могли загрузить этот файл с помощью getClass (). GetResource ().

Должен работать как на эмулированной 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);
    }
}
...