منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

إنشاء اطار دائري للصور باستخدام JLabel

اذهب الى الأسفل

إنشاء اطار دائري للصور باستخدام JLabel  Empty إنشاء اطار دائري للصور باستخدام JLabel

مُساهمة من طرف م/موسي السبت نوفمبر 30, 2019 8:06 pm

من المعروف أن لغة الجافا لا توفر مكون متخصص لعرض الصور فى تطبيقاتهم لذلك اغلبهم يستخدمون #JLabel لعرض الصور ..
ولذلك سننشئ في هذا المقال #JLabel مخصصًا سيكون له شكل دائري على حافته ، و بالتالى سنحصل على تأثير دائري رائع وأنيق لصورك بدلا من JLabel المستطيل التقليدي

إنشاء اطار دائري للصور باستخدام JLabel  CircleLabel


لإعطاء الشكل الدائري لـ JLabel ، ما سنفعله هو إنشاء حدودنا الخاصة التي سيتم تمديدها من #AbstractBorder ، ثم سنقوم بالكتابة فوق طريقة #paintBorder للرسم بفضل java2d على شكل Ellipse2D ، لملء الأجزاء من الشكل الدائري ، سيتم استخدامه لون المكون الرئيسي.

اذن اولا فئة سنقوم بكاتبة فئة و ليكن باسم #CircleBorder لانشاء الحدود الدائرية على النحو التالى :

الكود:

 import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.border.AbstractBorder;


public class CircleBorder extends AbstractBorder{

    private Color color;
    private BasicStroke stroke = null;
    private RenderingHints hints;

    
    CircleBorder() {        
        color = Color.blue;//negro
        stroke = new BasicStroke(2);//سمك الحافة
        hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    }

  
    CircleBorder( Color color, int value) {        
        this.color = color;
        stroke = new BasicStroke(value);    
        hints = new RenderingHints(
                RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
    }        

    @Override
    public void paintBorder(Component c,Graphics g,int x, int y, int width, int height) {

        Graphics2D g2 = (Graphics2D) g;
        Ellipse2D circle2D = new Ellipse2D.Double();//java2d

        //إذا كان عرض خط الحدود يساوي الصفر
        if( stroke.getLineWidth()==0 )
        {
            //ارسم الدائرة بالكامل
            circle2D.setFrameFromCenter(
                    new Point(x+width/2,y+height/2), //نقطة المنتصف
                    new Point( width , height) //ancho y alto
                    );            
        }
        else
        {
            //طلاء الدائرة ولكن طرح سمك الحافة
            circle2D.setFrameFromCenter(
                    new Point(x+width/2,y+height/2),
                    new Point( width-(int)stroke.getLineWidth() , height-(int) stroke.getLineWidth())
                    );            
        }                

        Polygon pointer = new Polygon();
        Area area = new Area(circle2D);        
        area.add(new Area(pointer));
        g2.setRenderingHints(hints);

        //طلاء الخلفية مع لون المكون الأصل
        Component parent  = c.getParent();
        if (parent!=null) {
            Color bg = parent.getBackground();
            Rectangle rect = new Rectangle(0,0,width, height);
            Area borderRegion = new Area(rect);
            borderRegion.subtract(area);
            g2.setClip(borderRegion);
            g2.setColor(bg);
            g2.fillRect(0, 0, width, height);
            g2.setClip(null);
        }                

        if( stroke.getLineWidth()>0 )
        {
            g2.setColor(color);
            g2.setStroke(stroke);            
        }        

        g2.draw(area);
    }

}

الان يمكنك استخدام الطريقة اعلاه على النحو التالى :

الكود:
 jLabel1.setBorder(new CircleBorder());
م/موسي
م/موسي
الاشراف
الاشراف

تاريخ التسجيل : 18/02/2011
المساهمات : 178
النقاط : 346
التقيم : 12
الدولة : تونس
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

إنشاء اطار دائري للصور باستخدام JLabel  Empty رد: إنشاء اطار دائري للصور باستخدام JLabel

مُساهمة من طرف زهراء الأحد يناير 19, 2020 5:53 pm

شكرا جزيلا و بالتوفيق يارفيق 
زهراء
زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 436
النقاط : 762
التقيم : 64
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى