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

طريقة تعديل زر swing إلى أي شكل شريطي

الزر المدمج في Swing، metalButton، غير جميل جدًا ولا يلبي احتياجاتنا الفعلية، لذا نحتاج إلى تخصيص الزر الذي نحبه، مثل زر صورة، وما إلى ذلك. كما في الشكل التالي.

ثم نوضح كيفية إعدادها.

(1) ابحث عن صور زر جميلة، ولكن قد يكون الزر موجودًا داخل الصورة، لذا نحتاج إلى استخدام برنامج مثل MeituXiuXiu أو PS لاستخراج الزر. كما في الشكل التالي:

(2) يمكنك حفظها بخلفية شفافة فقط.

(3) بعد ذلك، قم بكتابة فئة زر خاصتي:

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
public class newButton extends JButton{ 
 ImageIcon img; 
 public newButton(String icon){ 
  super(); 
  this.img = new ImageIcon(Demo.class.getResource(icon)); 
  setBorderPainted(false); 
  setContentAreaFilled(false); 
  setOpaque(false); 
  setSize(img.getIconWidth(),img.getIconHeight()); 
  try{ 
   bi = ImageIO.read(Demo.class.getResource(icon)); 
  } 
   JOptionPane.showMessageDialog(this,"يبدو أن ملف الصورة غير موجود","استثناء ImageIO",JOptionPane.ERROR_MESSAGE); 
   System.exit(0); 
  } 
 } 
 @Override 
 public void paintComponent(Graphics g){ 
  if(this.getModel().isPressed()){ 
   g.drawImage(img.getImage(),1,1,this); 
  } 
   g.drawImage(img.getImage(),0,0,this); 
  } 
  super.paintComponent(g); 
 } 
 BufferedImage bi ; 
 int rgb,alpha; 
 /** 
  * إعداد نطاق النقر للزر في منطقة الصورة غير الشفافة فقط. 
  */ 
 @Override 
 public boolean contains(int x,int y){ 
  try{ 
   rgb = bi.getRGB(x,y); 
   alpha = (rgb>>24)&0xFF; 
   if(alpha==0){ 
    return false; 
   } 
    return true; 
   } 
  } 
   // عند العثور على منطقة شفافة، ألقي استثناء ArrayIndexOutOfBoundsException 
   return false; 
  } 
 } 
} 

تم تعديل وظيفة contains لضمان أن يكون منطق النقر للفأرة محصورًا داخل منطقة الصورة الصالحة.

(4) كتبت كلاس Demo لتجربة:

import javax.swing.*; 
import java.awt.*; 
import java.net.URL; 
public class Demo { 
 public Demo(){ 
  JFrame jf=new JFrame("اختبار زر صورة شكل غير منتظم"); 
  jf.setBounds(500,200,700,500); 
  myJPanel jp = new myJPanel(Demo.class.getResource("bg.jpg")); 
  jp.setLayout(null); 
  newButton jb1 = new newButton("bt1.png"); 
  jb1.setLocation(44,44); 
  jp.add(jb1); 
  jb1 = new newButton("snowFlower.png"); 
  jb1.setLocation(200,44); 
  jp.add(jb1); 
  jb1 = new newButton("bt2.png"); 
  jb1.setLocation(350,64); 
  jp.add(jb1); 
  jb1 = new newButton("bt3.png"); 
  jb1.setLocation(450,64); 
  jp.add(jb1); 
  jf.add(jp); 
  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  jf.setVisible(true); 
 } 
 public static void main(String[] args){ 
  new Demo(); 
 } 
 private class myJPanel extends JPanel{ 
  ImageIcon bg; 
  public myJPanel(URL bg) { 
   this.setOpaque(false);// يجب أن تكون شفافة. 
   this.bg = new ImageIcon(bg); 
  } 
  // لتحديد صورة الخلفية 
  @Override 
  public void paintComponent(Graphics g){ 
   g.drawImage(bg.getImage(),0,0,this.getWidth(),this.getHeight(),this); 
   super.paintComponent(g); 
  } 
 } 
} 

هذا هو نهاية محتويات هذا المقال، نأمل أن تكون قد ساعدتكم في التعلم، ونأمل أن تدعموا تعليمات النفخ.

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

توصياتك