簡體   English   中英

無法在透明JFrame上創建不透明的JPanel

[英]Unable to create opaque JPanel on transparent JFrame

我正在一個項目中,我希望屏幕變為半透明(例如Google Picasa或Facebook照片查看器樣式),然后在其上放置另一個完全不透明的JPanel。 我看了很多在線找到的不同解決方案,但是我無法讓它們按照我想要的方式工作。 我試圖按照這里給出的指示

如何將JFrame背景設置為透明,但JPanel或JLabel背景設置為不透明?

最接近,因為它似乎顯示出我想要的效果。 但是,它仍然不起作用。

到目前為止,這是我的代碼:

package test;

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TransTest {
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {             
            BGBase base = new BGBase();
            base.setVisible(true);
        }
    });
}

static class BGBase extends JFrame {
BGPanel transparent = new BGPanel();

BGBase() {
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

    setTitle("Transparent Frame");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(d);
//      setUndecorated(true);
    setBackground(new Color(0, 255, 0, 0));
    getContentPane().setBackground(Color.BLACK);
//      setLayout(new BorderLayout());

    //Something needs to go here?
}
}

static class BGPanel extends JPanel {
BGPanel() {
    setOpaque(false);
}

@Override
protected void paintComponent(Graphics g) {

    // Allow super to paint
    super.paintComponent(g);

    // Apply our own painting effect
    Graphics2D g2d = (Graphics2D) g.create();
    // 50% transparent Alpha
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));

    g2d.setColor(getBackground());
    g2d.fill(getBounds());

    g2d.dispose();
}
}
}

首先十分感謝!

//setBackground(new Color(0, 255, 0, 0));
//getContentPane().setBackground(Color.BLACK);

我想讓屏幕變成半透明

您將alpha值指定為0,這意味着它是完全透明的。 另外,您不需要更改內容窗格的背景。

只需指定顏色或具有透明度的框架即可。 就像是:

setBackground(new Color(255, 255, 255, 128));

然后在其上放置完全不透明的另一個JPanel

然后,不需要自定義面板,因為默認情況下,JPanel是不透明的。 您唯一需要擔心的是使用適當的布局管理器,以便在框架中正確顯示面板。 當然,您實際上必須將面板添加到框架中。

更改

setOpaque(false);

setOpaque(true);

否則根本不會調用您的paintComponent方法(在BGPanel類中)。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM