java在半透明的JFrame上删除JTextPane的白色背景,而不使用set不透明()
我有一个Java代码,其中我实现了一个半透明的JPanel,上面有一个用2D图形绘制的图像。此图像是一个PNG,包括一个白色矩形,80%不透明,覆盖整个JFrame。现在我需要添加一个JTextPane来显示数据(顺便说一句,我将其设置为使用应用程序包中的自定义字体),但我无法使其半透明:它的白色背景是不透明的(即使使用textPane.setOpaque(false);
设置),并且使我的JFrame的透明度有点无用。。。威奇不酷
所以我正在寻找一种方法来去除这个让我抓狂的白色背景
我进行了很多谷歌搜索,但我找到的所有东西都是一个布尔值,用于设置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半透明,就在这里HERE)谢谢
# 1 楼答案
与Nimbus L&;F:
# 2 楼答案
这就是我如何处理这种想法
反馈
super.paintComponent
,否则会给它带来严重的麻烦,尤其是在处理透明组件时李>paintXxx
方法中执行任何长时间运行的任务,比如加载图像。这些方法旨在快速返回,并可在连续时间内多次调用李>