我很困惑关于一个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个按钮,然后一切就变得translucent.Why前添加一个表?
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?
(我问什么时候应用是run.I知道眼前的输出,当鼠标滑过那些按钮,或者在表中的任何行点击它时会变成不透明,这是由于Swing的绘制机制。)