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(メールを送信する際には、#を@に置き換えてください。通報を行い、関連する証拠を提供してください。一旦確認がついたら、本サイトは侵害された内容をすぐに削除します。)

おすすめ