当在标签上单击鼠标时,我希望带有图标的 JLabel 看起来“已单击”。 Label 包含一个 ImageIcon。我不想将图标更改为另一个图标,而是想“即时”用另一个颜色集(例如:setXORMode(new Color(255,0,0))重新绘制 ImageIcon。有人知道如何管理它吗?
JLabel my_label = new JLabel("");
my_label.setIcon(new ImageIcon(MyClass.class.getResource("/path/to/resources/myicon.jpg")));
my_label.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
//HERE I NEED THE VODOO :)
}
});
最佳答案
假设您将图像从磁盘读入,您会做这样的事情。
URL url = getClass().getResource("images/BB.jpg");
BufferedImage picture = ImageIO.read(url);
稍后当您需要更改 XOrMode 时,您可以执行以下操作:
Graphics2D g = picture.createGraphics();
g.setXORMode(new Color(255,0,0) )
g.dispose();
如果你想淡入/淡出,我推荐 timing framework .此外,如果除了标签中的图像之外还想重绘标签本身的部分,您可以覆盖 void paintComponent(Graphics g)
。
您可能会考虑研究的一个非常好的资源是这本书 Filthy Rich Clients .到处都是这种东西。如果您查看第 4 章网站上的示例,有一些示例图像代码可能会有用。如果您也能拿起这本书,那将是一本非常非常好的书。
关于java - 在 SWING JLabel 中动态单击淡化/重绘/修改 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271956/