English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Swingが提供するウィンドウは、私たちのアプリケーションの要件を満たすことはできませんので、任意の画像や形状のJFrameフレームを作成する必要があります。以下の図のようにです:
ウィンドウ背景画像の透明度を設定できます
以下に図のようにの効果を達成する方法を説明します:
(1)まず、見栄えの良い画像が必要です。例えば、羊皮紙の画像です。しかし、ダウンロードした画像は四角い矩形で、羊皮紙の形は画像の内部にありますので、美图秀秀やPSの切り取り機能を使用して羊皮紙を切り取り、以下のようになります:
(2)画像を透明背景として保存します。
(3)次に、JFrameを継承するmyJFrameを作成します。以下のコードです:
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);//内容パネルを透明に設定 this.setContentPane(rp); this.setUndecorated(true); this.setSize(rp.img.getIconWidth(), rp.img.getIconHeight()); AWTUtilities.setWindowOpaque(this, false);//JFrameを透明に設定 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); } } }
上記のプログラムの主なコードは、JFrameを透明にし、JFrameの枠を取り除き、コンテンツパネルを透明にし、その後画像をコンテンツパネルに描画する点にあります。
(4)書くテストクラス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("パスワード"); 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フレームの枠が削除されたため、ウィンドウをドラッグしたり伸縮したりすることはできません。ドラッグや伸縮の機能を実現する方法は、この記事で説明されています:swingでフレームのドラッグと伸縮を実現
これで本文の全てが終わり、皆さんの学習に役立つことを願っています。また、呐喊タutorialを多くのサポートをお願いします。
声明:この記事の内容はインターネットから取得しており、著作権者は所有者であり、インターネットユーザーによって自発的に提供され、アップロードされています。本サイトは所有権を有しておらず、編集されていません。著作権侵害の可能性がある内容を見つけた場合は、メールを送信して:notice#oldtoolbag.com(メールを送信する際には、#を@に置き換えてください。通報を行い、関連する証拠を提供してください。一旦確認がついたら、本サイトは侵害された内容をすぐに削除します。)