【发布时间】:2016-02-25 07:31:21
【问题描述】:
我有一个带有 JLabel 的 JPanel,它拥有一个图标图片。 如何在整个JPanel(包括JLabel Icon)的顶部设置透明的红色? 我为面板设置了透明背景色,但我希望包括图片在内的整个面板都获得这种透明颜色。类似于 JPanel 顶部的透明彩色玻璃
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TransparentJLabel {
private static final String IMAGE_PATH = "http://duke.kenai.com/Oracle/OracleStratSmall.png";
private static void createAndShowUI() {
JPanel panel = new JPanel();
panel.setBackground(Color.pink);
URL imageUrl;
try {
imageUrl = new URL(IMAGE_PATH);
BufferedImage image = ImageIO.read(imageUrl);
ImageIcon icon = new ImageIcon(image);
JLabel label = new JLabel(icon);
panel.add(label);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
JFrame frame = new JFrame("TransparentJLabel");
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
【问题讨论】:
-
Swing 组件要么完全透明,要么完全不透明。您可以通过使组件完全透明并覆盖它的
paintComponent方法并用您想要的任何颜色填充组件区域来作弊 -
在这种情况下进行叠加要复杂得多。您可以考虑使用 JLayer/JXLayer。否则,您可以考虑使用 Overlay 布局管理器
标签: java swing jpanel awt transparent