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

إنشاء نافذة باستخدام أي صورة كخلفية

swing自带的窗体是不能够满足我们的应用需求的,所以需要制作任意图片和形状的JFrame框体,比如下图:

并且可以设置窗体背景图片的透明度

下面说明如何做到上图的效果:

(1)首先你得需要一张好看的图片,比如羊皮纸。但是这个下载的图片是方方正正的矩形,羊皮纸的形状在图片的内部,所以我们用美图秀秀或者PS中的抠图功能将羊皮纸抠出来,如下:


(2)将图片保存为透明背景即可。
(3)接着写一个myJFrame继承JFrame,代码如下:

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).يحصل_على_المكون_المزج(); 
      ((Graphics2D) g).يضبط_المكون_المزج(ac); 
      if(img!=null){ 
        g.drawImage(img.getImage(), 0, 0, getWidth(), getHeight(), this); 
      } 
      ((Graphics2D) g).يضبط_المكون_المزج(old); 
      super.يرسم_المكونات(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.يضبط_التصميم(null); 
    Font الخط = new Font("SongTi",Font.PLAIN,30); 
    JLabel المستخدم = new JLabel("اسم_المستخدم"); 
    المستخدم.يضبط_الخط(الخط); 
    المستخدم.يحدد_المواضع(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 تحقيق سحب وتمدد النافذة

هذا هو محتوى المقال كله، آمل أن يكون قد ساعدكم في التعلم، وأتمنى أن تدعموا دائمًا تعليمات النطق.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، يملك حقوق النشر الأصلي للمالكين، تم جمعه من قبل المستخدمين على الإنترنت بتحميلهم، ويملك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل إنساني، ولا يتحمل هذا الموقع أي مسؤولية قانونية مرتبطة بذلك. إذا كنت قد وجدت محتوى يشتبه في حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' بـ '@') لتقديم الشكوى، وقدم الدليل على الشكوى، إذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم فورًا.

أفضل لك