我有一个 Java 代码,我在其中实现了一个半透明的 JPanel,上面用 Graphics 2D 绘制了一个图像。此图像是一个 PNG,其中包括一个白色矩形,80% 不透明,遍布整个 JFrame。现在我需要添加一个 JTextPane 来显示数据(我将其设置为使用应用程序包 BTW 中的自定义字体),但我无法使其成为半透明:它的白色背景是不透明的(即使有textPane.setOpaque(false);
设置)并且使我的 JFrame 的透明度有点没用...... Wich 并不酷。
所以我正在寻找一种方法来消除这个让我害怕的白色背景。
我滚动了许多 Google 搜索,但我发现的所有内容都是用于设置 JTextPane 不透明度的布尔值。我还发现,使用 Graphics 2D,我可以创建一个自定义 JTextPane 并覆盖它的背景,但它不起作用......我已经尝试了所有这些。
public class MyWindow extends JFrame {
private static class MyTextPane extends JTextPane {
public MyTextPane() {
super();
setText("Hello World");
setOpaque(false);
setBackground(new Color(0,0,0,0));
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(new Color(0, 0, 0, 0));
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
}
public static void main(String[] args) {
MyTextPane textPane = new MyTextPane();
JPanel panel = new JPanel() {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
try {
Image img = ImageIO.read(new File("images/bg.png"));
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
} catch (IOException e) {
e.printStackTrace();
}
if (g instanceof Graphics2D) {
final int R = 240;
final int G = 240;
final int B = 240;
Paint p =
new GradientPaint(0.0f, 0.0f, new Color(R, G, B, 0),
0.0f, getHeight(), new Color(R, G, B, 0), true);
Graphics2D g2d = (Graphics2D)g;
g2d.setPaint(p);
g2d.fillRect(0, 0, getWidth(), getHeight());
}
}
};
panel.add(textPane);
setContentPane(panel);
}
(用Oracle的解释使JFrame半透明,就在这里)谢谢!