الوقت/التاريخ الآن هو الخميس مارس 28, 2024 10:30 pm

2 نتيجة بحث عن JLabel

[Swing]أجعل الصورة تاخذ حجم JLabel

يسمح لنا المكون #JLabel بتحميل صورة وذلك من خلال الخاصية setIcon ، ومع ذلك لا تأخذ الصورة حجم JLabel ولكنها تحتفظ بحجمها الخاص ،لذلك سنناقش كيفية جعل الصورة تاخذ حجم  JLabel

الوسم jlabel على المنتدى منتدى مصر التقني Image_java_scale

ويتم ذلك باستخدام الطريقة #getScaledInstance والتى تاخذ المعلمات (عرض int ، ارتفاع int ، تلميحات int) ) من فئة الصورة #Image . تقوم هذه الطريقة بإنشاء نسخة مصغرة من الصورة. إرجاع كائن صورة جديد من شأنه أن يعرض الصورة بالعرض والارتفاع المحددين بشكل افتراضي. يمكن تحميل الكائن Image الجديد بشكل غير متزامن حتى إذا كانت الصورة المصدر الأصلي قد تم تحميلها بالكامل بالفعل.

وسيتم فهم ذلك من خلال المثال التالى :

الكود:

 int w = label.getWidth();
        int h = label.getHeight();

//الصورة الاصل
Image img = new ImageIcon(getClass().getResource("/example/black_christmas.png")).getImage();
//تحديد حجم الصورة بقيم حجم رمز التسمية
Image newimg = img.getScaledInstance(w, h,  java.awt.Image.SCALE_SMOOTH);
ImageIcon imageIcon = new ImageIcon(newimg);
//وضع الصورة لرمز التسمية
label.setIcon(imageIcon);
من طرف زهراء
في الجمعة فبراير 07, 2020 1:13 pm
 
ابحث في: واجهة المستخدم الرسومية Java Swing
موضوع: [Swing]أجعل الصورة تاخذ حجم JLabel
المساهمات: 1
مشاهدة: 722

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

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

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

انتقل الى: