الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تطبيق zebra effect على JList

بدأه herch في 26 أغسطس 2010 · 11 رد · 1,113 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ما أعنيه بال zebra effect هو جعل كل سطر من ال JList مختلف عن الذي بعده، مثل ما يظهر في الصورة.

post-181903-066353100 1282786193_thumb.p

بما أننا سنغير طريقة رسم الخلايا، فسنقوم بالتعديل على ال cell renderer، حيث أن JList لا تقوم بنفسها برسم الخلايا. سنستعمل الفئة DefaultListCellRenderer

داخل هذه الفئة، سنعمل override للطريقة getListCellRendererComponent. هذه الطريقة تعيد المكون الذي سيقوم برسم الخلية.

المبدأ بسيط، الطريقة getListCellRendererComponent تنتظر عدة argument، من بينها ال index الخاص بالخلية، لذلك يكفي أن نتحقق من هذا ال index، فإذا كان odd نعطيه لونا، وإذا كان even نعطيه لونا آخر.

أظن أن الكود واضح بما فيه الكفاية

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;

public class ZebraList extends JList {

	private Color firstColor, secondColor;

	public ZebraList(Color firstColor, Color secondColor) {
		this.firstColor = firstColor;
		this.secondColor = secondColor;
		setCellRenderer(new ZebraCellRenderer());
	}

	class ZebraCellRenderer extends DefaultListCellRenderer {

		@Override
		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

			if (isSelected) {	// نريد أن نحفظ المظهر الإفتراضي للخلية عند اختيارها
				setBackground(getSelectionBackground());
				setForeground(getSelectionForeground());
			} else if (index % 2 == 0) {
				setBackground(firstColor);
			} else {
				setBackground(secondColor);
			}
			this.setText(value.toString());
			return this;
		}

	}

	public static void main(String[] args) {
		JFrame frm = new JFrame();
		DefaultListModel model = new DefaultListModel();
		model.addElement("Element1");
		model.addElement("Element2");
		model.addElement("Element3");
		model.addElement("Element4");
		model.addElement("Element5");
		model.addElement("Element6");
		ZebraList list = new ZebraList(new Color(0xd0d8e0), new Color(0x83B9EE));
		list.setModel(model);
		frm.add(list, BorderLayout.CENTER);
		frm.setSize(100, 200);
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frm.setVisible(true);
	}
}

موضوع جميل عن ال JList للأخ وجدي : Swing JList Hacking

المرفقات
Capture- .png
4
#2

تم الإضافة إلى المواضيع المميزة تحت بند swing

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

هاد تاثير الحمار الوحشي

هل من الممكن Tiger Effect

؟؟؟

:lol:

+1

#4

تسلم الايادى اخى عصام

موضوع جميل

+1

ايه رايك لم نعملها مكون اضافى فى الـ palette بتاعت النت بينز

custom list يعنى

انا لم اقم بشىء هو تعديلا على الكود لكى نستطيع وضعه فى الـ palette

تقبلها منى اخى عصام

import java.awt.*;
import javax.swing.*;

public class ZebraList extends JList {

    private Color firstColor, secondColor;

    public ZebraList() {
        this.firstColor = new Color(0xd0d8e0);
        this.secondColor = new Color(0x83B9EE);
        setCellRenderer(new ZebraCellRenderer());
    }

    class ZebraCellRenderer extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

            if (isSelected) {
                setBackground(getSelectionBackground());
                setForeground(getSelectionForeground());
            } else if (index % 2 == 0) {
                setBackground(firstColor);
            } else {
                setBackground(secondColor);
            }
            this.setText(value.toString());
            return this;
        }
    }

    public void setColors(Color firstColor, Color secondColor) {
        this.firstColor = firstColor;
        this.secondColor = secondColor;
    }
}

وبعد ذلك يمكنا وضعها فى الـpalette وسحبها الى داخل المشروع بكل بساطه :)

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 26 أغسطس 2010 في 16:56

Software Developer
Mahmoudkelany.com


 

#5
محمد عرسان كتب:

هاد تاثير الحمار الوحشي

هل من الممكن Tiger Effect

؟؟؟

:lol:

+1

laugh.gif لم أعرف كيف أسميها، ورأيت البعض يعطيها هذا الإسم

Mahmoud Kelany كتب:

ايه رايك لم نعملها مكون اضافى فى الـ palette بتاعت النت بينز

custom list يعنى

انا لم اقم بشىء هو تعديلا على الكود لكى نستطيع وضعه فى الـ palette

تقبلها منى اخى عصام

من قال لك لديك الحق في التعديل angry.gif ادفع Bg_030.gif

أظن أن المكونات التي تتم إضافتها لل palette يجب أن تكون على شكل bean، لكن لست متأكدا

#6

متميز دائما أخي عصام.. ألم أقل لك :D

بالمناسبة... الموضوع هذا في ال JSF من أبسط ما يكون :P

#7
herch كتب:

من قال لك لديك الحق في التعديل angry.gif ادفع Bg_030.gif

أظن أن المكونات التي تتم إضافتها لل palette يجب أن تكون على شكل bean، لكن لست متأكدا

اعتذر على ذلك

حاضر هادفع :)

ايوه لازم تكون java bean

يعنى class يكون فيها empty constractor ولا يكون بها داله main

Software Developer
Mahmoudkelany.com


 

#8
هويدي كتب:

متميز دائما أخي عصام.. ألم أقل لك :D

بالمناسبة... الموضوع هذا في ال JSF من أبسط ما يكون :P

يعنى ايه بالنسبه للـ JSF بتكون ابسط

ازاى يعنى

ممكن توضح يا عموو هويدى ؟؟

Software Developer
Mahmoudkelany.com


 

#9
Mahmoud Kelany كتب:

يعنى class يكون فيها empty constractor ولا يكون بها داله main

ويجب أن تكون كل الحقول private، وكل حقل يكون لديه getter و setter

اقتباس
بالمناسبة... الموضوع هذا في ال JSF من أبسط ما يكون

لا داعي لنذهب ل JSF، يكفي HTML و CSS tongue.gif

#10

محمد لماذا أزلت الألوان من الحسبة

يمكنك أن تبقي أكثر من صانع كائنات ولا مشكلة في ذلك

هويدي ورينا يا عم الحج :)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#11

:wub: :wub:

نسيت موضوع الـ encapsulation

بس انا اقصد اللى البرنامج يقبله انه لازم يكون bean بناء فارغ يعنى

انما الـ setter , getters للتعامل مع الbean

على العموم معذره على هذا السهوو

اهو كل حاجه فيه تمام :)

ان شاء الله

import java.awt.*;
import javax.swing.*;

public class ZebraList extends JList {

    private Color firstColor, secondColor;

    public ZebraList() {
        this.firstColor = new Color(0xd0d8e0);
        this.secondColor = new Color(0x83B9EE);
        setCellRenderer(new ZebraCellRenderer());
    }

    class ZebraCellRenderer extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

            if (isSelected) {
                setBackground(getSelectionBackground());
                setForeground(getSelectionForeground());
            } else if (index % 2 == 0) {
                setBackground(getFirstColor());
            } else {
                setBackground(getSecondColor());
            }
            this.setText(value.toString());
            return this;
        }
    }

    public void setColors(Color firstColor, Color secondColor) {
        this.setFirstColor(firstColor);
        this.setSecondColor(secondColor);
    }

    /**
     * @return the firstColor
     */
    public Color getFirstColor() {
        return firstColor;
    }

    /**
     * @param firstColor the firstColor to set
     */
    public void setFirstColor(Color firstColor) {
        this.firstColor = firstColor;
    }

    /**
     * @return the secondColor
     */
    public Color getSecondColor() {
        return secondColor;
    }

    /**
     * @param secondColor the secondColor to set
     */
    public void setSecondColor(Color secondColor) {
        this.secondColor = secondColor;
    }
}
1

Software Developer
Mahmoudkelany.com


 

#12

توجد property إسمها rowclasses يتم وضع بها ال CSS classes التي يتم التنواب في إستخدامها...

توجد أمثله هنا: http://www.exadel.com/tutorial/jsf/jsftags-guide.html

1

مواضيع مشابهة