2011-06-18 88 views
2

我以前用javax.swing.JLabel這樣做透明背景:如何使java.awt.Label背景透明?

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); 
+3

不知道爲什麼你的JLabel需要設置它的背景,因爲默認情況下它不是不透明的,所以你可以將它的背景設置爲任何東西,它將是透明的。回到你的問題:爲什麼AWT而不是Swing呢? –

+1

@hovercraft,不知道我怎麼錯過了你的評論,只是在我做了我的3個小時之前,+1。 – camickr

+0

@Hovercraft Full Of Eels:我認爲這是因爲我將標籤放置在自定義面板中(請參閱問題中的更新)。 AWT,因爲它加載速度更快。這就是飛濺窗口。這是一個「學習」項目。 – bancer

回答

6

我可以看到爲什麼你不想加載Swing,因爲它是一個飛濺。 Sun/Oracle自己實現的SplashScreen一直是AWT。

爲什麼不只是使用現有的類來實現您的飛濺功能?


正如camickr所述,參見How to Create a Splash Screen的例子。

Splash using SplashScreen

現在我在說什麼。


至於標籤,把它們留下。使用FontMetrics或(更好)TextLayout來確定文本的大小/位置,然後直接將其繪製到Image

有關使用TextLayout類的示例,請參見trashgod's answer至'Java2D Graphics anti-aliased'。

+1

+1,請參閱:http://download.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html一個woking的例子。 – camickr

+0

@Andrew,我不明白這是如何回答OP的原始問題,雖然這是一個很好的(也是更正確的)替代方案... – mre

+1

@mre:您的評估可能是正確的。有時候我覺得OP *可能會提出錯誤的問題,並且當我最瞭解它時,不得不回答「正確的問題」。當然,有時候我會犯這種可怕的錯誤。實際上 - 現在我重讀了這個冠軍頭銜,打出'很可能是正確的',並且說'正確'。 –

-1

我用來做透明背景javax.swing.JLabel中這樣說:

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

那什麼也沒做。 JLabel默認是透明的(即setOpaque(false))。您可能想要閱讀Background With Transparency以瞭解透明度如何與Swing協同工作。

我從來沒有使用過標籤,但如果它的工作原理類似於JLabel,那麼我想你會重寫isOpaque()方法來返回false。

+0

重寫isOpaque不能解決問題。 –

+0

這就是爲什麼我應該堅持與搖擺:) – camickr