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

Creazione di finestre con sfondo immagine personalizzabile in Java

La finestra di Swing non può soddisfare le nostre esigenze di applicazione, quindi è necessario creare una finestra JFrame con qualsiasi immagine e forma, come nella figura sottostante:

Puoi anche impostare la trasparenza dell'immagine di sfondo della finestra

Di seguito, spieghiamo come ottenere l'effetto mostrato nell'immagine:

(1) Prima di tutto, hai bisogno di un'immagine accattivante, ad esempio carta per scrivere. Tuttavia, l'immagine scaricata è un rettangolo perfetto, la forma della carta per scrivere è all'interno dell'immagine, quindi usiamo la funzione di rimozione dello sfondo di Meitu Xiu o PS per estrarre la carta per scrivere, come segue:


(2) Salva l'immagine con sfondo trasparente.
(3) Continua a scrivere un myJFrame che estende JFrame, il codice è il seguente:

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); // Imposta il pannello contenitore come trasparente 
      this.setContentPane(rp); 
      this.setUndecorated(true); 
      this.setSize(rp.img.getIconWidth(), rp.img.getIconHeight()); 
      AWTUtilities.setWindowOpaque(this, false); // Imposta JFrame come trasparente 
      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); 
    } 
  } 
} 

Il codice principale del programma sopra è: impostare JFrame come trasparente, rimuovere i bordi di JFrame, impostare il pannello contenente come trasparente e poi disegnare l'immagine sul pannello contenente.

(4) scrivi una classe di test 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,145,250,40); 
    JLabel ps = new JLabel("Password"); 
    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) Poiché sono stati rimossi i bordi, la finestra non può essere trascinata e ridimensionata. L'implementazione delle funzioni di trascinamento e ridimensionamento è descritta in questo articolo: Implementazione del trascinamento e ridimensionamento delle finestre Swing

Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento e che tu sostenga fortemente il tutorial URL.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è della proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare