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

Como criar uma janela com qualquer imagem como fundo no Java

A janela padrão do Swing não atende às nossas necessidades de aplicativo, então precisamos criar uma janela JFrame de qualquer imagem e forma, como na imagem a seguir:

E você pode ajustar a opacidade da imagem de fundo da janela

A seguir, explicarei como fazer o efeito da imagem acima:

(1)Primeiro, você precisa de uma imagem bonita, por exemplo, papel de velho. Mas a imagem baixada é um retângulo quadrado, a forma do papel de velho está dentro da imagem, então usamos o recurso de recorte de imagem do Meitu ou do Photoshop para cortar o papel de velho, conforme a seguir:


(2)Salve a imagem com fundo transparente.
(3)Escreva um myJFrame herdando JFrame, o código é o seguinte:

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);//Definir o painel de conteúdo como transparente 
      this.setContentPane(rp); 
      this.setUndecorated(true); 
      this.setSize(rp.img.getIconWidth(),rp.img.getIconHeight()); 
      AWTUtilities.setWindowOpaque(this, false);//Configurar JFrame como transparente 
      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); 
    } 
  } 
} 

O código principal do programa acima está relacionado a: configurar JFrame como transparente, remover a borda do JFrame, configurar o painel de conteúdo como transparente e, em seguida, desenhar a imagem no painel de conteúdo.

(4) escrever uma classe de teste Test:

import javax.swing.*; 
import java.awt.*; 
public class Test { 
  public static void main(String[] args) { 
    /** 
     * Configurar a imagem de fundo e a opacidade da imagem de fundo, 0 para completamente transparente,1.0f para opaco. 
     */ 
    myJFrame f = new myJFrame("ab.png",0.7f); 
    f.setLayout(null); 
    Font font = new Font("宋体",Font.PLAIN,30); 
    JLabel user = new JLabel("Nome de usuário"); 
    user.setFont(font); 
    user.setBounds(100,150,100,30); 
    JTextField userInput = new JTextField(); 
    userInput.setFont(font); 
    userInput.setBounds(200,145,250,40); 
    JLabel ps = new JLabel("Senha"); 
    ps.setFont(font); 
    ps.setBounds(110,200,90,30); 
    JTextField psInput = new JTextField(); 
    psInput.setFont(font); 
    psInput.setBounds(200,195,250,40); 
    f.add(user); 
    f.add(userInput); 
    f.add(ps); 
    f.add(psInput); 
    f.setLocation(300,100); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setVisible(true); 
  } 
} 

(5)Como a borda foi removida, a janela não pode ser arrastada e esticada. A implementação dessas funções pode ser vista neste artigo: Implementação de arrasto e esticamento de janelas Swing

Isso é tudo o que há no artigo, esperamos que ajude no seu aprendizado e que você apóie o tutorial Yell.

Declaração: O conteúdo deste artigo é proveniente da Internet, pertence ao respectivo proprietário, foi submetido e carregado voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais relacionadas.3codebox.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Em caso de verificação, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar