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