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