在SWING JLabel上点击时淡入/重绘/修改ImageIcon

3

我希望当鼠标单击标签时,带有图标的JLabel看起来像是被“点击”了。该标签包含一个ImageIcon。我想要的不是将图标更改为另一个图标,而是在运行时使用另一种颜色集重新绘制ImageIcon(例如:setXORMode(new Color(255,0,0)))。有没有人知道如何实现这一点?

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 :)
    }
});

这个图像是从磁盘或网络中读取的,还是即时创建的? - Jay Askren
2个回答

2
假设您已经从磁盘中读取了图像,您需要执行以下操作:
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();

如果你想实现淡入/淡出效果,我建议使用定时框架。此外,如果你想重新绘制标签中的图像以及标签本身的部分,可以重写void paintComponent(Graphics g)方法。
另外,一个非常好的资源是书籍《Java高级图形界面编程》(原书名为Filthy Rich Clients)。该书充满了这样的内容。如果你查看第4章网站上的示例代码,其中有一些用于处理图像的代码,可能会很有用。这也是一本非常好的书籍供你参考。

谢谢 - 这正是我所想的。 - Erik

2

当图标加载时,我将使用LookupOp修改其副本。然后在鼠标处理程序中使用setIcon()


1
我喜欢这两个解决方案,但我更喜欢另一个。感谢您的回答;我为您投了一票。 - Erik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接