투명하게 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
Jubael을 통해 볼 수 없기 때문에 @uba no, 나는 rect가 그려지는 타원을 여전히 볼 수 있습니다. –
* "투명하게 JPanel을 만들려고합니다."* 왜 응용 프로그램 기능을 제공합니까? 아마 그 기능을 달성하는 더 좋은 방법이 있기 때문에 묻습니다. –