我對在JPanel中顯示組件感到困惑。JPanel中的內容如何變得半透明?
假設,如果我創建一個自定義的JPanel具有0.8f的半透明如下: -
JPanel panel=new JPanel(){
@Override
public void paint(Graphics g)
{
super.paint(g);
BufferedImage img=(BufferedImage)createImage(getWidth(),getHeight());
Graphics2D g2=(Graphics2D) g.create();
g2.setComposite(AlphaComposite.SrcOver.derive(0.8f));
g2.drawImage(img,0,0,null);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
};
現在,我將其設置爲框架的contentPane。
frame.setContentPane(panel);
現在我給它添加一些按鈕。
frame.add(new JButton("Click Here"));
frame.add(new JButton("Click Here"));
frame.add(new JButton("Click Here"));
frame.add(new JButton("Click Here"));
1)然後,在輸出爲何我得到半透明按鈕?作爲JPanel的是單層和予先塗上半透明圖像時我overrided其paint
方法,然後加入按鈕,按鈕不能被半透明如他們應該過來。
2)同樣在這4個按鈕中只有2個是半透明的。爲什麼會有這種偏袒?
3)如果我在添加這4個按鈕之前添加一個表格,那麼一切都變得半透明。爲什麼?
Object[] names = new Object[] {
"Title", "Artist", "Album"
};
String[][] data = new String[][] {
{ "Los Angeles", "Sugarcult", "Lights Out" },
{ "Do It Alone", "Sugarcult", "Lights Out" },
{ "Made a Mistake", "Sugarcult", "Lights Out" },
{ "Kiss You Better", "Maximo Park", "A Certain Trigger" },
{ "All Over the Shop", "Maximo Park", "A Certain Trigger" },
{ "Going Missing", "Maximo Park", "A Certain Trigger" }
};
JTable table = new JTable(data, names);
frame.add(table);
4)如果我使用paintComponent(Graphics g)
的JPanel中再沒有什麼是半透明的,我是否添加表或沒有或儘可能多的按鈕是added.Why?
(我正在詢問應用程序運行時的直接輸出。我知道當鼠標滾過這些按鈕時,或者如果表格中的任何一行被點擊,它將變得不透明,這是由於Swing的繪畫機制造成的。)
1)'的JPanel面板=新JPanel(){ @Override 公共無效塗料(圖形克) { super.paint(克);'應'的JPanel面板=新JPanel() {圖片g) { super.paintComponent(g);'2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –
另外,不要忘記'處理()'你創建的任何'Graphics'對象。 –
@AndrewThompson:請參閱我更新的問題。最後一點4. –