gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:04:58 27 4
gpt4 key购买 nike

我正在学习 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com