1

我使用本教程制作了一个自定义光标。问题是,一旦它发生变化,我什么也得不到。光标不可见。我尝试了那里给出的铅笔图像,这是我很快用油漆绘制的自定义图像,但它们都不起作用。

    public Cursor stoneCursor;
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage("pencil.gif");
    Point hotspot = new Point(0,0);
    stoneCursor = toolkit.createCustomCursor(image, hotspot, "Stone");
    getContentPane().setCursor(stoneCursor);

这当然是在 JFrame 中。

"。如果要显示的图像无效,光标将被隐藏(完全透明),热点将设置为 (0, 0)。" 这是在 createCustomCursor() 的 javadoc 中编写的,但它应该与pencil.gif 一起使用吗?

感谢您提前回答!:)

4

2 回答 2

5

你的代码对我有用。我打赌该工具包找不到您的图像,因此无法显示它。这是一个完整的工作示例,它使用与您相同的代码(除了我使用来自 URL 的公共图像):

import java.awt.Cursor;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class TestCursor {

    protected void initUI() throws MalformedURLException {
        JFrame frame = new JFrame("Test text pane");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image image = toolkit.getImage(new URL("http://fc03.deviantart.net/fs71/f/2010/094/7/9/Kalyan_hand_cursor_1_by_Zanten.png"));
        Point hotspot = new Point(0, 0);
        Cursor cursor = toolkit.createCustomCursor(image, hotspot, "Stone");
        frame.setCursor(cursor);

        frame.setSize(600, 400);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                try {
                    new TestCursor().initUI();
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}
于 2012-07-03T12:08:28.623 回答
1

如果您使用的是 Java 1.5,那么您可能会对这个 SO 问题感兴趣。如果你使用更新的东西,这段代码也很适合我(刚刚尝试过)。如果图像不存在或无法正确访问,那么我会遇到与您相同的效果。

确保正确加载图像。

于 2012-07-03T12:12:14.287 回答