更改光标大小

时间:2012-09-24 04:31:58

标签: java cursor custom-component

我使用:

创建了一个游标
    BufferedImage im=null;
    try {
        im = ImageIO.read(new File("images/cursor1.jpg"));
    } catch (IOException ex) {
        Logger.getLogger(SRGView.class.getName()).log(Level.SEVERE, null, ex);
    }
    Cursor cursor = getToolkit().createCustomCursor(im, new Point(1,1), "s");
    this.setCursor(cursor);

cursor1.jpg是5X5(以像素为单位)。但是,当它显示在屏幕上时,它要大得多。我想制作尺寸为1X1,5X5,10X10的光标。我宁愿选择动态创建图像而不是读取图像文件。即。

for (int x = 0; x < w; x++) {
        for (int y = 0; y < h; y++) {
        im.setRGB(x, y, new Color(255, 0, 0).getRGB());
  }
    }

上面的代码会创建一个宽度为w,高度为h的红色图像,我希望将其用作我的光标。

怎么做?

1 个答案:

答案 0 :(得分:0)

看起来Windows只接受32X32大小的游标。所以这就是我解决问题的方法:

主要思想是使32X32尺寸图像中的每个像素都透明,并仅将颜色应用于您希望在光标中看到的像素。在这种情况下,我想要一个w x h红色矩形光标,因此,在32X32图像的中心,我将w x h像素设置为红色并将该图像设置为光标。

public void setCursorSize(int w, int h) {
    this.cw = w;
    this.ch = h;
    if (w > 32) {
        w = 32;
    }
    if (h > 32) {
        h = 32;
    }
    Color tc = new Color(0, 0, 0, 0);
    BufferedImage im = new BufferedImage(32, 32, BufferedImage.TYPE_4BYTE_ABGR);//cursor size is 32X32
    for (int x = 0; x < 32; x++) {
        for (int y = 0; y < 32; y++) {
            im.setRGB(x, y, tc.getRGB());
        }
    }
    for (int x = 16 - w / 2; x <= 16 + w / 2; x++) {
        for (int y = 16 - h / 2; y <= 16 + h / 2; y++) {
            im.setRGB(x, y, new Color(255, 0, 0).getRGB());
        }
    }
    this.setCursor(getToolkit().createCustomCursor(im, new Point(16, 16), "c1"));
}