Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 투명한 JDialog를 어떻게 구현할 수 있습니까?


JDialog 대화 상자 의 하위 클래스입니다. 클래스이며 최소화 를 유지하지 않습니다. 및 최대화 창의 오른쪽 상단 모서리에 있는 버튼. 대화 상자에는 모달 의 두 가지 유형이 있습니다. 및 비모다 엘. 대화 상자의 기본 레이아웃은 BorderLayout입니다.

아래 프로그램에서 AlphaContainer 를 사용자 정의하여 투명한 JDialog를 구현할 수 있습니다. 클래스를 만들고 paintComponent() 재정의 방법.

예시

import java.awt.*;
import javax.swing.*;
public class TransparentDialog {
   public static void main (String[] args) {
      JDialog dialog = new JDialog();
      dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      dialog.getRootPane().setOpaque(false);
      dialog.setUndecorated(true);
      dialog.setBackground(new Color (0, 0, 0, 0));
      JPanel panel = new JPanel(new BorderLayout ());
      panel.setBackground(new Color (0, 0, 0, 64));
      dialog.add(new AlphaContainer(panel));
      JSlider slider = new JSlider();
      slider.setBackground(new Color(255, 0, 0, 32));
      panel.add (new AlphaContainer(slider), BorderLayout.NORTH);
      JButton button = new JButton("Label text");
      button.setContentAreaFilled(false);
      panel.add(button, BorderLayout.SOUTH);
      dialog.setSize(400, 300);
      dialog.setLocationRelativeTo(null);
      dialog.setVisible(true);
   }
}
class AlphaContainer extends JComponent {
   private JComponent component;
   public AlphaContainer(JComponent component){
      this.component = component;
      setLayout(new BorderLayout());
      setOpaque(false);
      component.setOpaque(false);
      add(component);
   }
   @Override
   public void paintComponent(Graphics g) {
      g.setColor(component.getBackground());
      g.fillRect(0, 0, getWidth(), getHeight());
   }
}

출력

Java에서 투명한 JDialog를 어떻게 구현할 수 있습니까?