java - 你如何改变java中的光标颜色?

标签 java swing awt

我正在学习 swing 图形,我想尝试在 java 中更改光标颜色。所以我下载了一些金色星星的 gif 文件来尝试用作我的光标,但是当我将图像添加为 ImageIcon 时,它把星星的颜色变成了黑色。

编辑:修改语法

import java.awt.Dimension;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class stuff {
    public static void main (String[] args)
    {
        JFrame frame = new JFrame("FRAME");
        JPanel lpanel = new JPanel();
        frame.setContentPane(lpanel);
        ImageIcon goldStar = new ImageIcon("./res/goldStar.gif");
        JLabel gs = new JLabel(goldStar);
        lpanel.add(gs);

        goldStar = new ImageIcon(goldStar.getImage().getScaledInstance((int)(goldStar.getIconWidth()/13), (int)(goldStar.getIconHeight()/13), Image.SCALE_SMOOTH));
        lpanel.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(goldStar.getImage(),new Point(0,0), "custom cursor"));
        //I think these two lines are creating the problem.

        lpanel.setPreferredSize(new Dimension(1600,900));
        frame.setVisible(true);
        frame.pack();
    }
}

我查看了游标的一些方法,但没有找到任何可以帮助我的方法。

这是我试图整合为我的鼠标光标的图片: cursor

最佳答案

您可以按照说明加载 gif 图像帧 here并遍历它们。

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {

    private int currentIndex;

    public Main() throws IOException {
        JFrame frame = new JFrame("FRAME");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        frame.setContentPane(panel);

        List<Cursor> cursors = new ArrayList<>();
        List<BufferedImage> frames = getFrames("GWigb.gif");
        for (BufferedImage image : frames) {
            cursors.add(Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "cursor image"));
        }

        Timer timer = new Timer(50, (actionEvent) -> {
            panel.setCursor(cursors.get(currentIndex++));
            if (currentIndex >= cursors.size())
                currentIndex = 0;
        });
        timer.start();

        panel.setPreferredSize(new Dimension(1600, 900));
        frame.setVisible(true);
        frame.pack();
    }

    public List<BufferedImage> getFrames(String gif) throws IOException {
        List<BufferedImage> frames = new ArrayList<>();
        ImageReader reader = ImageIO.getImageReadersByFormatName("gif").next();
        File input = new File(gif);
        ImageInputStream stream = ImageIO.createImageInputStream(input);
        reader.setInput(stream);

        int count = reader.getNumImages(true);
        for (int index = 0; index < count; index++) {
             frames.add(reader.read(index));
        }
        return frames;
    }

    public static void main(String[] args) throws IOException {
        new Main();
    }

}

关于java - 你如何改变java中的光标颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699041/

相关文章:

java - 按住 ALT 键并单击,删除 JList 上选定的元素

java - 从绝对文件路径创建动态 JTree

java - 在树的图形表示中画线

java - 如何从java应用程序打印出ms word文件

java - 正确使用 toString 打印数组?

java - Java 的艺术与科学第 4 章,练习 8

java - 将通过 php 套接字检索的字节转换为整数

Java绘制方法显示错误

java - 如何在 jFrame 上布局多个面板? ( java )

java - 有没有一种简单的方法可以知道当前是否显示模式对话框?