【发布时间】:2016-02-02 09:12:35
【问题描述】:
我已经进行了几次检查并研究了如何使单个面板透明以便显示其下方的图像,但在JTabbedPane 上的面板上没有成功。我在JTabbedPane 的两个面板上都有setOpaque(false) 和setBackground(new Color(0,0,0,20)),并且在JTabbedPane 本身上也做了同样的事情。但是,我仍然无法显示选项卡式窗格背面的图像。我在这里还缺少什么?
tabbePane.java
package tabbedpanetransparencypractice;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.*;
public class tabbedPane extends JTabbedPane{
JPanel tab1panel = new JPanel();
JPanel tab2panel = new JPanel();
public tabbedPane(){
this.setPreferredSize(new Dimension(400,400));
this.setBackground(new Color(0,0,0,20));
this.setOpaque(false);
tab1panel.setBackground(new Color(0,0,0,20));
tab2panel.setBackground(new Color(0,0,0,20));
tab1panel.setOpaque(false);
tab2panel.setOpaque(false);
this.addTab("Tab 1", tab1panel);
this.addTab("Tab 2", tab2panel);
}
}
topPanel.java
package tabbedpanetransparencypractice;
import javax.swing.*;
import java.awt.*;
public class topPanel extends JPanel{
Image myBG = new ImageIcon(getClass().getClassLoader().getResource("Assets/loginBg.jpg")).getImage();
@Override
public void paintComponent(Graphics g){
g.drawImage(myBG,0,0,getWidth(),getHeight(),this);
}
public topPanel(){
addTabbedPane();
}
public void addTabbedPane(){
tabbedPane tabbedpane = new tabbedPane();
this.add(tabbedpane);
}
}
frame.java
package tabbedpanetransparencypractice;
import java.awt.Dimension;
import javax.swing.*;
public class frame extends JFrame{
topPanel myPanel = new topPanel();
public frame(){
this.setPreferredSize(new Dimension(600,600));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.pack();
this.setLocationRelativeTo(null);
addComponents();
}
final void addComponents(){
this.setContentPane(myPanel);
}
}
main.java
package tabbedpanetransparencypractice;
public class main {
public static void main(String[] args) {
frame myFrame = new frame();
}
}
这是我得到的输出(我希望 tab1 和 tab2 是透明的以显示下面的 bg 图像)
如果有任何帮助,我将不胜感激。谢谢。
【问题讨论】:
-
Swing 不知道如何使用基于不透明的组件绘制基于 alpha 的颜色,这样做会导致奇怪和随机的绘制伪像
标签: java swing transparent paintcomponent jtabbedpane