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

Crea una ventana con cualquier imagen de fondo en Java

El cuadro de ventana integrado en Swing no puede satisfacer nuestras necesidades de aplicación, por lo que se necesita crear un cuadro de JFrame de cualquier imagen y forma, como se muestra en la siguiente imagen:

Y puedes configurar la transparencia de la imagen de fondo del cuadro de ventana

A continuación, se explica cómo lograr el efecto de la imagen anterior:

(1)Primero necesitas una imagen bonita, por ejemplo, papel pergamino. Pero la imagen descargada es un rectángulo cuadrado, la forma del pergamino está dentro de la imagen, por lo que utilizamos la función de extracción de la imagen de Meitu Xiu o PS para extraer el pergamino, como se muestra a continuación:


(2)guarda la imagen con fondo transparente.
(3)a continuación, escribe un myJFrame que hereda de JFrame, el código es el siguiente:

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);//establecer el panel de contenido en transparente 
      this.setContentPane(rp); 
      this.setUndecorated(true); 
      this.setSize(rp.img.getIconWidth(), rp.img.getIconHeight()); 
      AWTUtilities.setWindowOpaque(this, false);//Establecer 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); 
    } 
  } 
} 

El código principal del programa anterior se encuentra en: Establecer JFrame como transparente, JFrame sin borde, establecer el panel de contenido como transparente, luego dibujar la imagen en el panel de contenido.

(4);Escribir una clase de prueba Test:

import javax.swing;*; 
import java.awt;*; 
public class Test { 
  public static void main(String[] args) { 
    /** 
     * Establecer la imagen de fondo y la transparencia de la imagen de fondo, 0 para transparente,1.0f de opaco. 
     */ 
    myJFrame f = new myJFrame("ab.png",0.7f); 
    f.setLayout(null); 
    Font font = new Font("宋体",Font.PLAIN,30); 
    JLabel user = new JLabel("Nombre de usuario"); 
    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("Contraseña"); 
    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)Dado que se ha eliminado el borde, la ventana no se puede arrastrar ni estirar, la implementación de las funciones de arrastrar y estirar se puede ver en este artículo: Implementación de arrastrar y estirar ventanas en Swing

Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y que todos apoyen a la tutorial de grito.

Declaración: Este artículo se ha obtenido de la red, pertenece al propietario original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado una edición humana y no asume la responsabilidad legal correspondiente. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#w3Declaración: El contenido de este artículo se ha obtenido de la red, pertenece al propietario original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado una edición humana y no asume la responsabilidad legal correspondiente. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#w

Te gustará