我正在嘗試使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