gpt4 book ai didi

java - JPanel 内部的半透明组件

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:13 24 4
gpt4 key购买 nike

我有从 JPanel 扩展的类 MyPanel。 MyPanel 类具有包含图标的 JLabel 组件。

我的问题是如何在 MyPanel 类中绘制/渲染此 JLabel 组件以获得半透明效果(通过图标查看)(不创建 xxxJLabel 扩展 JLabel 类并覆盖 paintComponents 方法)。

谢谢

最佳答案

一种方法是为 JLabel 提供半透明图像。这可以在 setIcon() 或类似调用之前使用标准标签完成,或者通过扩展 JLabel 并覆盖 setIcon() 来完成方法来做同样的事情。

例如第二种技术

enter image description here

代码

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.net.URL;

class TransparentIcon {
public static void main(String[] args) throws Exception {
String imgURL =
"http://www.gravatar.com/avatar/" +
"a1ab0af4997654345d7a949877f8037e";
final BufferedImage image = ImageIO.read(new URL(imgURL));
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ImageIcon icon = new ImageIcon(image);

JPanel p = new JPanel(new GridLayout(2,3));
for (int ii=0; ii<6; ii++) {
TransparentLabel tl = new TransparentLabel();
tl.setOpacity((ii+1)/6f);
tl.setIcon(icon);
p.add(tl);
}

JOptionPane.showMessageDialog(null, p);
}
});
}
}

class TransparentLabel extends JLabel {

float opacity = 1f;

public void setOpacity(float opacity) {
this.opacity = opacity;
}

private Icon getTranslucentIcon(Icon icon) {

if (icon!=null) {
BufferedImage bi = new BufferedImage(
icon.getIconWidth(),
icon.getIconHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
AlphaComposite ac = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER,
opacity);
g.setComposite(ac);
icon.paintIcon(this,g,0,0);
g.dispose();

return new ImageIcon(bi);
} else {
return null;
}
}

public void setIcon(Icon icon) {
super.setIcon( getTranslucentIcon(icon) );
}
}

更新

I just wonder how it can be done if i get Graphics of JLabel inside MyPanel class and change its visual appearance?

LabelRenderTest.javaJLabel 呈现为 BufferedImage,以便它可用于 paintComponent(Graphics) 方法内的自定义呈现。

但请注意:我不太明白 JLabel 在您的用例中的优势是什么。我在那个例子中使用它来呈现 HTML。如果我只有一张图片,我会直接使用图片(例如 Graphics.drawImage(Image,int,int,ImageObserver))并且永远不会创建标签。

关于java - JPanel 内部的半透明组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133339/

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