English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

임의의 이미지를 배경으로 한 창을 생성하는 방법

스윙이 제공하는 창은 우리의 애플리케이션 요구를 충족시키지 않으므로, 어떤 이미지와 모양의 JFrame 프레임을 만들어야 합니다. 예를 들어, 아래와 같습니다:

또한 창 배경 이미지의 투명도를 설정할 수 있습니다

위의 효과를 어떻게 얻을 수 있는지 설명합니다:

(1)먼저 멋진 이미지가 필요합니다. 예를 들어, 양지지입니다. 하지만 다운로드된 이미지는 정사각형입니다. 양지지의 형상은 이미지 내부에 있습니다. 따라서 메이크업 쇼우 또는 PS에서의 마스크 표현 기능을 사용하여 양지지를 뽑아냅니다. 다음과 같습니다:


(2)투명 배경으로 이미지를 저장하면 됩니다.
(3)myJFrame를 JFrame를 상속한 것을 작성하면 다음과 같습니다:

import com.sun.awt.AWTUtilities; 
import javax.swing.*; 
import java.awt.*; 
public class myJFrame extends JFrame{ 
  private float alpha; 
    public myJFrame(String bgPath,float alpha){ 
      super(); 
      myContentPane rp = new myContentPane(bgPath); 
      rp.setOpaque(false);//콘텐트 패널을 투명으로 설정합니다 
      this.setContentPane(rp); 
      this.setUndecorated(true); 
      this.setSize(rp.img.getIconWidth(), rp.img.getIconHeight()); 
      AWTUtilities.setWindowOpaque(this, false);//JFrame를 투명으로 설정합니다 
      this.alpha = alpha; 
    } 
  private class myContentPane extends JPanel{ 
    public ImageIcon img; 
    public myContentPane(String bgPath) { 
      super(); 
      img = new ImageIcon(Test.class.getResource(bgPath)); 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
      AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); 
      Composite old = ((Graphics2D) g).getComposite(); 
      ((Graphics2D) g).setComposite(ac); 
      if(img!=null){ 
        g.drawImage(img.getImage(), 0, 0, getWidth(), getHeight(), this); 
      } 
      ((Graphics2D) g).setComposite(old); 
      super.paintComponent(g); 
    } 
  } 
} 

위 프로그램의 주요 코드는 다음과 같습니다: JFrame를 투명으로 설정하고, JFrame의 테두리를 제거하고, 컨텐트 패널을 투명으로 설정한 후 이미지를 컨텐트 패널에 그립니다.

(4) 작성하십시오. Test:

import javax.swing.*; 
import java.awt.*; 
public class Test { 
  public static void main(String[] args) { 
    /** 
     * 设置背景图和背景图的透明度,0为全透明,1.0f为不透明。 
     */ 
    myJFrame f = new myJFrame("ab.png",0.7f); 
    f.setLayout(null); 
    Font font = new Font("宋体",Font.PLAIN,30); 
    JLabel user = new JLabel("사용자 이름"); 
    user.setFont(font); 
    user.setBounds(100,150,100,30); 
    JTextField userInput = new JTextField(); 
    userInput.setFont(font); 
    userInput.setBounds(200,145250,40); 
    JLabel ps = new JLabel("암호"); 
    ps.setFont(font); 
    ps.setBounds(110200,90,30); 
    JTextField psInput = new JTextField(); 
    psInput.setFont(font); 
    psInput.setBounds(200,195250,40); 
    f.add(user); 
    f.add(userInput); 
    f.add(ps); 
    f.add(psInput); 
    300,100); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setVisible(true); 
  } 
} 

(5)테두리를 제거했기 때문에 창을 드래그하고 확장할 수 없습니다. 드래그하고 확장 기능의 구현은 이 문서에서 확인할 수 있습니다. Swing으로 창 드래그와 확장 구현

이것이 본 문서의 모든 내용입니다. 많은 도움이 되길 바라며, 많은 지지를 부탁드립니다. 나아가呐喊 교육을 많이 지지해 주시기 바랍니다.

명시: 본 문서의 내용은 인터넷에서 가져왔으며, 저작권은 원저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용으로, 이 사이트는 소유권을 가지지 않으며, 인공적으로 편집되지 않았으며, 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있으시면, notice#w 이메일 주소로 메일을 보내 주시기 바랍니다.3codebox.com에 대한 신고는 이메일을 보내시면 #을 @으로 변경해 주시고 관련 증거를 제공해 주시면, 신고가 확인되면 이 사이트는 즉시 저작권 침해 내용을 삭제할 것입니다.

추천 합니다