【问题标题】:Fade/Redraw/Modify ImageIcon on click in SWING JLabel on the fly即时在 SWING JLabel 中单击时淡化/重绘/修改 ImageIcon
【发布时间】:2010-07-17 14:47:43
【问题描述】:

当鼠标点击标签时,我希望带有图标的 JLabel 看起来“被点击”。标签包含一个 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 :)
    }
});

【问题讨论】:

  • 图片是您从磁盘或网络中读取的,还是您动态创建的?

标签: java swing icons jlabel


【解决方案1】:

假设您将图像从磁盘读入,您将执行以下操作。

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 章网站上的示例,将会有一些示例图像代码可能有用。这对你来说也是一本非常非常好的书。

【讨论】:

  • 谢谢 - 我就是这么想的。
【解决方案2】:

我会使用LookupOp 在图标加载时修改它的副本。然后在鼠标处理程序中使用setIcon()

【讨论】:

  • 我喜欢这两种解决方案,但我更喜欢另一种。感谢您的回答;我为你 +1 投票。
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
相关资源
最近更新 更多