الوقت/التاريخ الآن هو الجمعة أبريل 26, 2024 6:59 pm

1 نتيجة بحث عن paintBorder

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

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

الوسم paintborder على المنتدى منتدى مصر التقني 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());
من طرف م/موسي
في السبت نوفمبر 30, 2019 8:06 pm
 
ابحث في: واجهة المستخدم الرسومية Java Swing
موضوع: إنشاء اطار دائري للصور باستخدام JLabel
المساهمات: 2
مشاهدة: 978

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

انتقل الى: