【问题标题】:How to make java.awt.Label background transparent?如何使 java.awt.Label 背景透明?
【发布时间】:2011-09-17 23:32:48
【问题描述】:

我以前用 javax.swing.JLabel 做透明背景是这样的:

lbl.setBackground(new Color(0, 0, 0, 0));

但它不适用于 java.awt.Label。有什么简单的方法可以让标签透明吗?

更新:

public class SplashBackground extends Panel {

    private static final long serialVersionUID = 1L;

    private Image image = null;

    /**
     * This is the default constructor
     */
    public SplashBackground() {
        super();
        initialize();
    }

    /**
     * This method initializes this
     * 
     */
    private void initialize() {
        image = Toolkit.getDefaultToolkit().createImage(getClass().getResource("/splash/splash.jpg"));
        this.setLayout(null);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if(image != null) {
            g.drawImage(image, 0,0,this.getWidth(),this.getHeight(),this);
        }
    }

}

lbl= new Label();
lbl.setBackground(new Color(0, 0, 0, 0));
splashBackground = new SplashBackground();
splashBackground.add(appNameLabel, null);

【问题讨论】:

  • 不知道为什么你的 JLabel 需要设置它的背景,因为它默认不是不透明的,所以你可以将它的背景设置为任何东西,它会是透明的。回到你的问题:为什么 AWT 而不是 Swing 呢?
  • @hovercraft,不知道我是怎么错过你的评论的,它是在我发表评论前 3 小时发表的,+1。
  • @Hovercraft Full Of Eels:我认为这是因为我将标签放在自定义面板中(请参阅问题中的更新)。 AWT,因为它加载速度更快。那是用于启动窗口。那是一个“学习”项目。

标签: java label transparency awt transparent


【解决方案1】:

我明白你为什么不想加载 Swing,因为它是为了炫耀。 Sun/Oracle 自己的SplashScreen 实现一直是AWT。

为什么不将现有的类用于您的启动功能?


如 camickr 所述,请参阅 How to Create a Splash Screen 以获取示例。

现在这就是我在说什么。


至于标签,请忽略它们。使用FontMetrics 或(更好)TextLayout 确定文本的大小/位置,然后直接将其绘制到Image

有关使用TextLayout 类的示例,请参阅trashgod's answer 到“Java2D 图形抗锯齿”。

【讨论】:

  • +1,请参阅:download.oracle.com/javase/tutorial/uiswing/misc/… 以获取示例。
  • @Andrew,我不明白这如何回答 OP 的原始问题,尽管它是一个很好(更正确)的替代方案......
  • @mre:您的评估可能是正确的。有时我觉得 OP 可能问了错误的问题,并且觉得有必要按照我最理解的方式给出“正确问题”的答案。当然,有时我会弄错。实际上 - 现在我重读了那个标题,打出“可能正确”并改成“正确”。
  • 我想使用我自己的实现,因为很难测试 java.awt.SplashScreen。每次进行更改时,我都必须构建 MyApp.jar 文件。只有在我运行 jar 文件时才会出现启动窗口。
  • @bancer:“每次我进行更改时,我都必须构建 MyApp.jar 文件。”使用 Ant 和开发人员。机器有点咕噜咕噜的声音,为新的运行构建一个项目不再是问题。
【解决方案2】:

我以前用 javax.swing.JLabel 做透明背景是这样的:

lbl.setBackground(新颜色(0, 0, 0, 0));.

这没有任何作用。默认情况下,JLabel 是透明的(即 setOpaque(false))。您可能需要阅读 Background With Transparency 以了解透明度如何与 Swing 配合使用。

我从未使用过 Label,但如果它像 JLabel 一样工作,那么我猜你会覆盖 isOpaque() 方法以返回 false。

【讨论】:

  • 覆盖 isOpaque 并不能解决问题。
  • 这就是为什么我应该坚持使用 Swing :)
猜你喜欢
  • 2015-08-06
  • 2011-02-18
  • 2016-10-24
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
相关资源
最近更新 更多