我正在尝试使JPanel透明,但我无法完成它的工作。是否有可能做到这一点?如何绘制透明背景?
import java.awt.*;
import javax.swing.*;
public class ClearPanel extends JPanel{
public static void main(String[] args) {
ClearPanel c = new ClearPanel();
c.setPreferredSize(new Dimension(200, 200));
c.setOpaque(false);
JPanel backPanel = new JPanel();
backPanel.setBackground(Color.CYAN);
backPanel.add(c);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(backPanel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(0, 0, 200, 200);
g.clearRect(45, 45, 50, 50);
Graphics2D g2 = (Graphics2D) g;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f));
g2.fillRect(75, 75, 50, 50);
}
}
椭圆应该是不透明的,但我想要透明的矩形。通过透明,我的意思是我应该能够看到ClearPanel背后的面板。
从MadProgrammer的回答开始,是否有任何方法可以将灰色方块绘制在区域之外,但在区域内保持透明?
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle fill = new Rectangle(getWidth(), getHeight());
Graphics2D g2d = (Graphics2D) g.create();
Rectangle hole = new Rectangle(0, 0, 100, 100);
Area area = new Area(fill);
area.subtract(new Area(hole));
g2d.setColor(getBackground());
g2d.fill(area);
g2d.setColor(Color.RED);
g2d.setComposite(AlphaComposite.SrcOver.derive(0.0f));
g2d.fill(hole);
g2d.setComposite(AlphaComposite.SrcOver.derive(1.0f));
g2d.setColor(Color.DARK_GRAY);
if(area.contains(0,0,100,200))
g2d.fillRect(0, 0, 100, 200);
g2d.dispose();
}
没有'drawRect()'满足您的需求? – uba 2013-03-09 10:24:01
@uba不,因为我无法透过Jpanel看到,我仍然会看到矩形绘制的椭圆。 – 2013-03-09 10:25:55
*“我试图让一片JPanel透明..”*为什么它提供了什么应用程序功能?我问,因为有可能有更好的方法来实现这一功能。 – 2013-03-09 12:38:50