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

تعرف على SwingX

بدأه herch في 25 نوفمبر 2009 · 21 رد · 5,442 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

SwingX هو مشروع يهدف إلى توفير بعض المكونات غير الموجودة في Swing، وفيما يلي وصف لبعض هذه المكونات

لتشغيل الأمثلة، يجب إضافة الملف swingx-1.6.jar إلى الclasspath. يمكن تحميله من هــــــــــــــــنـــــــــــا

JXBusyLabel

post-181903-12591530989224_thumb.png

هذا المكون يمكن استعماله لإعلام المستخدم بأن البرنامج مشغول ويقوم بعمل ما

نقوم بإنشاء JXBusyLabel كالتالي

JXBusyLabel bLabel1 = new JXBusyLabel();

أو إذا أردنا تحديدالحجم

JXBusyLabel bLabel1 = new JXBusyLabel(new Dimension(60, 60));

إذا اكتفينا بهذا السطر فإن الJXLabel يكون بدون حركة post-181903-12591535795455_thumb.png

لإضافة الحركة نستعمل السطر التالي

bLabel1.setBusy(true);

ولإيقاف الحركة

bLabel1.setBusy(false);

كما يمكن تشخيص هذا المكون بتغيير ألوان المقدمة والخلفية، مثلا

bLabel2.getBusyPainter().setHighlightColor(Color.RED);
bLabel2.getBusyPainter().setBaseColor(Color.white);

والنتيجة post-181903-12591547896552_thumb.png

وهذا مثال لاستعمال JXBusyLabel، الشيفرة موجودة في المرفقات

JXBusyLabelTest.zip

تم تعديل هذه المشاركة بواسطة herch في 25 نوفمبر 2009 في 17:51

7
#2

JXDatePicker

post-181903-1259159502362_thumb.png

هذا المكون يعطي الإمكانية للمستخدم لاختيار التاريخ

أولا ننشئ كائن من فئة JXDatePicker ونمرر له تاريخ اليوم

JXDatePicker datePicker = new JXDatePicker(new Date());

لمعرفة متى يقوم المستخدم باختيار التاريخ، فإننا نضيف ActionListener، وداخل الميثود actionPerformed نسترجع التاريخ الذي تم اختياره بواسطة الميثود getDate()

datePicker.addActionListener(new ActionListener() {

	public void actionPerformed(ActionEvent e) {
		System.out.println(datePicker.getDate());
	}
});

وهذا مثال على الإستعمال

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JFrame;
import org.jdesktop.swingx.JXDatePicker;

public class JXDatePickerTest extends JFrame {

	JXDatePicker datePicker;

	public JXDatePickerTest() {
		datePicker = new JXDatePicker(new Date());
		datePicker.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				System.out.println(datePicker.getDate());
			}
		});
		add(datePicker);
		setLayout(new FlowLayout());
		setSize(300, 100);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		new JXDatePickerTest();
	}
}
2
#3

JXHyperlink

post-181903-12591697259547_thumb.png

هذا المكون عبارة عن زر لكن له نفس مظهر الروابط في صفحات الويب

أولا ننشئ object من صنف JXHyperlink ونحدد النص الذي سيظهر فيه

JXHyperlink link = new JXHyperlink();
link.setText("Visit ArabTeam forum");

ثم نضيف ActionListener وداخل الميثود actionPerformed نقوم باستدعاء المتصفح وإظهار صفحة الفريق العربي للبرمجة

link.addActionListener(new ActionListener() {

	public void actionPerformed(ActionEvent e) {
		try {
			Desktop.getDesktop().browse(new URI(""));
			link.setClicked(true);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
});

الميثود setClicked() تقوم بتغيير لون النص بحيث يظهر بأن الرابط قد تمت زيارته

وهذا مثال

import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URI;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXHyperlink;

public class JXHyperLinkTest extends JFrame {

	JXHyperlink link;

	public JXHyperLinkTest() {
		link = new JXHyperlink();
		link.setText("Visit ArabTeam forum");
		link.setToolTipText("http://www.arabteam2000.com");
		link.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				try {
					Desktop.getDesktop().browse(new URI("/"));
					link.setClicked(true);
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}
		});
		setLayout(new FlowLayout());
		add(link);
		setSize(300, 100);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			public void run() {
				new JXHyperLinkTest();
			}
		});
	}
}
2
#4

JXImagePanel

هذا المكون يسمح بإظهار صورة، تقريبا مثل JLabel مع الميثود setIcon لكن مع بعض الإضافات.

أولا ننشئ كائن من فئة JXImagePanel

JXImagePanel imgPanel = new JXImagePanel();

ثم نحدد الصورة التي نريد إظهارها

try {
	imgPanel.setImage(ImageIO.read(new File("img.png")));
} catch (IOException ex) {
	ex.printStackTrace();
}

ويتم افتراضيا إظهار الصورة في الوسط.

هذا المكون يتيح إظهار الصور بثلاث طرق:

إما في الوسط

post-181903-12591815510553_thumb.png

وهذا هو التصرف افتراضي، أو يمكن عمله بالشكل التالي

imgPanel.setStyle(JXImagePanel.Style.CENTERED);

أو على شكل بلاط -- حسب مترجم google --

post-181903-12591819710418_thumb.png

بكتابة السطر التالي

imgPanel.setStyle(JXImagePanel.Style.TILED);

أو باتخاد الصورة لنفس قياس الحاوي

post-181903-12591820531365_thumb.png

بكتابة السطر التالي

imgPanel.setStyle(JXImagePanel.Style.SCALED);

كما أن هذا المكون يسمح بتغيير الصورة الظاهرة بدون كتابة أي سطر، يكفي فقط النقر بالفأرة عليه.

لتشغيل هذه الخاصية، يكفي السطر التالي

imgPanel.setEditable(true);

وهذا مثال كامل (الصورة المستعملة مرفقة لمن يحب الكائنات الفضائية)

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXImagePanel;

public class JXImagePanelTest extends JFrame {

	JXImagePanel imgPanel;

	public JXImagePanelTest() {
		imgPanel = new JXImagePanel();
		imgPanel.setEditable(true);
		try {
			imgPanel.setImage(ImageIO.read(new File("img.png")));
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		final JComboBox combo = new JComboBox(new String[]{"CENTERED", "TILED", "SCALED"});
		combo.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				if (combo.getSelectedIndex() == 0) {
					imgPanel.setStyle(JXImagePanel.Style.CENTERED);
				} else if (combo.getSelectedIndex() == 1) {
					imgPanel.setStyle(JXImagePanel.Style.TILED);
				} else if (combo.getSelectedIndex() == 2) {
					imgPanel.setStyle(JXImagePanel.Style.SCALED);
				}
			}
		});
		add(imgPanel);
		add(combo, BorderLayout.SOUTH);
		setSize(300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			public void run() {
				new JXImagePanelTest();
			}
		});
	}
}

post-181903-12591827831363_thumb.png

#5

JXList

post-181903-12591868914627_thumb.png

هذه الكلاس عبارة عن JList معدلة، وهي تتيح إمكانيات رائعة ليست متاحة في JList، ويتطلب إنجازها من البداية جهدا ووقتا كبيرين، وعشرات من أسطر الكود.

JXList مثلها مثل كل المكونات التي تكلمنا عنها تتوفر على عدة constructors لكنني أختار واحدا وأعمل عليه، هنا سأستعمل الconstructor التالي

 

JXList(Object[] listData, boolean autoCreateRowSorter)

الargument الاول عبارة عن جدول يحتوي على عناصر القائمة، الargument الثاني يحدد لJXList هل يستعمل RowSorter أو لا، وهذا الRowSorter هو المسؤول على عملية تصنيف أو ترتيب العناصر sorting، لتبسيط الأمور لنقل أننا نحدد من خلال هذا الboolean هل عناصر القائمة قابلة للتصنيف أم لا

إذن فلننشئ كائن من صنف JXList

 

 

String[] names = {"Khaled", "Issam", "Hassan", "Sophia", "Asmaa", "Hiba", "Karim", "Hakim", "Hazim", "Halima", "Ahmed"};
JXList list = new JXList(names, true);

الآن لدينا قائمة غير مصنفة، يمكننا ترتيبها إما تصاعديا

 

 

 

 

list.setSortOrder(SortOrder.ASCENDING);
او تنازليا

 

 

 

 

list.setSortOrder(SortOrder.DESCENDING);

الآن سننتقل إلى المظهر، ولنغير قليلا هذا الأبيض والأسود الذي يصيب بالضجر.

يمكننا أن نطلب من صديقنا JXList بأن يلون العناصر بلونين مختلفين، مثلا الأول بالرمادي والثاني بالابيض والثالث بالرمادي والرابع بالأبيض وهكذا...

يمكن عمل ذلك في سطر واحد ( يا سلااااام :D )

 

 

 

 

list.addHighlighter(HighlighterFactory.createAlternateStriping(Color.GRAY, Color.WHITE));
كل ما يتعلق بالتلوين في JXList من اختصاص Highlighter وابنائها

يمكننا أيضا تلوين عنصر ما من القائمة عند مرور الفأرة من فوقه، وبالطبع سنستعمل أحد أنواع الHighlighter وهو ColorHighlighter

 

 

 

 

list.addHighlighter(new ColorHighlighter(HighlightPredicate.ROLLOVER_ROW, Color.WHITE, Color.RED));
اللون الأول هو لون الخلفية، والثاني هو لون الكتابة، إذا كنا لا نريد تغيير لون أحدهما فيمكننا تمرير null بدل اللون.

مثلا

 

 

 

 

list.addHighlighter(new ColorHighlighter(HighlightPredicate.ROLLOVER_ROW, null, Color.RED));
بما أننا مرننا null بدل لون الخلفية فلن يتم تغيير لون الخلفية عند مرور الفأرة

كما أن هناك إمكانية البحث في عناصر القائمة، وذلك عن طريق الكلاس ListSearchable والتي تتوفر على الميثود search التي تقوم بتلوين العنصر الذي يحتوي على الكلمة المبحوث عنها

يمكننا مثلا استعمال JTextField والبحث عن النص الذي يتم كتابته داخلها

أولا ننشئ كائن ListSearchable ونمرر للconstructor القائمة التي سنعمل عليها

 

 

 

 

String[] names = {"Khaled", "Issam", "Hassan", "Sophia", "Asmaa", "Hiba", "Karim", "Hakim", "Hazim", "Halima", "Ahmed"};
 JXList list = new JXList(names, true);
ListSearchable searchable = new ListSearchable(list);
ثم ننشئ الJTextField ونقوم بالتقاط حدث تغيير المحتوى.

 

 

 

 

JTextField txtSearch = new JTextField();
txtSearch.getDocument().addDocumentListener(new DocumentListener() {

	public void insertUpdate(DocumentEvent e) {
		searchable.search(txtSearch.getText());
	}

	public void removeUpdate(DocumentEvent e) {
		searchable.search(txtSearch.getText());
	}

	public void changedUpdate(DocumentEvent e) {}
});
هذا كل ما نحتاج لعمله لإضافة خاصية البحث لقائمتنا

المثال الكامل موجود في المرفقات، وهذا شكل المثال عند تنفيذه

JXListTest.zip

تم تعديل هذه المشاركة بواسطة Xacker في 20 يناير 2013 في 00:55

1
#6

JXTable

هذا المكون الذي يرث من JTable يضيف عدة أشياء لهذه الأخيرة.

يمكننا ترتيب الاسطر فقط بنقرة على عنوان العمود الذي نريد الترتيب حسب قيمه.

يمكننا تغيير مكان الأعمدة فقط بعمل drag&drop.

بالإضافة إلى مزايا أخرى

عملية إنشاء كائن JXTable شبيهة بتلك الخاصة بJTable. يمكننا أن نمرر للconstructor كائن TableModel أو نمرر مصفوفات تحتوي على القيم وأسماء الأعمدة

String[][] rowData = {{"Issam", "24", "Male"}, {"Samir", "26", "Male"},
						{"Sophia", "30", "Female"}, {"Younes", "13", "Male"},
						{"Asmaa", "40", "Female"}};
String[] columnNames = {"Name", "Age", "Sexe"};
JXTable table = new JXTable(rowData, columnNames);

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

table.setColumnControlVisible(true);

وكما قمنا بذلك مع jxlist، فإنه يمكن تغيير ألوان الجدول بسهولة، باستعمال الHighlighter طبعا.

مثلا

table.addHighlighter(HighlighterFactory.createSimpleStriping());

يعطي النتيجة التالية

post-181903-12592322618484_thumb.png

لمعرفة الHighlighters المتوفرة يمكنكم الرجوع إلى الjavadoc الخاصة بswingx.

وهذا مثال

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.decorator.HighlighterFactory;

public class JXTableTest extends JFrame {

	JXTable table;

	public JXTableTest() {
		String[][] rowData = {{"Issam", "24", "Male"}, {"Samir", "26", "Male"},
								{"Sophia", "30", "Female"}, {"Younes", "13", "Male"},
								{"Asmaa", "40", "Female"}};
		String[] columnNames = {"Name", "Age", "Sexe"};
		table = new JXTable(rowData, columnNames);
		table.addHighlighter(HighlighterFactory.createSimpleStriping());
		table.setColumnControlVisible(true);
		add(new JScrollPane(table));
		setSize(300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			public void run() {
				new JXTableTest();
			}
		});
	}
}

تم تعديل هذه المشاركة بواسطة herch في 26 نوفمبر 2009 في 13:48

#7

JXTaskPane

post-181903-12592370838436_thumb.png

هذا المكون شبيه بالإطار الموجود في يسار windows explorer.

في الصورة أعلاه لدينا ثلاث إطارات، كل إطار يمثل JXTaskPane. ويجب إضافتها إلى حاوي خاص بها وهو JXTaskPaneContainer

ننشئ الJXTaskPane

JXTaskPane taskPane1 = new JXTaskPane();

نحدد العنوان الذي سيظهر في أعلى الإطار

taskPane1.setTitle("Manage files");

نضيف الإطار إلى الحاوي

JXTaskPaneContainer container = new JXTaskPaneContainer();
container.add(taskPane1);

يمكن إضافة أي مكون Swing إلى JXTaskPane، وستظهر بشكلها العادي، كما يمكن إضافة أي كائن يعمل implement للinterface Action، وستظهر على شكل رابط، كما هو ظاهر في الإطار الأول في الصورة

Action act = new AbstractAction("Open file") {

	public void actionPerformed(ActionEvent e) {
		new JFileChooser().showOpenDialog(null);
	}
};
taskPane1.add(act);

المثال الكامل في المرفقات

JXTaskPaneTest.zip

تم تعديل هذه المشاركة بواسطة herch في 26 نوفمبر 2009 في 16:30

#8

فعلا أدوات رائعة يا عصام ,,, شكرا لك على طرح الأداة الجديدة

#9

ادوات رائعة جدا اتمنى ضافتها في ال JDK

شكرا لك عزيزي سأعود للتجربة في وقت لاحق

Linux for human beings

#10

أظن أن jxdatepicker سيتم إدماجه في النسخة السابعة من الjdk، كما أن Nimbus L&F تمت كتابته من طرف مبرمجي swingx نفسهم قبل أن يتم إدماجه في التحديثاث الأخيرة من الjdk.

2
#11

بصراحه رووووووووووووووووووووووووووووعه

تسلم يداك على الموضوع

مع التحيه

منصور

#12

جميعها رائعه ..

يوجد هنا اداة لاختيار التاريخ "أداة تقويم"

/index.php?showtopic=208481

ربما تفيد هي الاخري :)

شكراً جزيلاً :)

صــفــر

#13

رائعه جدا الاداءة شكرا الك اخي كثير :)

ab66i830gh93.gif

i25sctz8qnls.jpg

#14

مووضوع مميز لاخى عصام

اردت تنشطيه لتعم الفائده

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

جزاك الله كل خير يارب :)

Software Developer
Mahmoudkelany.com


 

#15

بارك الله فيكم ...وجعلها الله بموازين حسناتكم

#16

أستاذ يا عصام ...

#17

@محمود

تعمل في التنقيب على الآثار :lol: الموضوع كتب من سنة وتراكمت عليه أطنان من الغبار وأثرت فيه عوامل التعربة ومرت عليه حضارات وشعوب مختلفة ...

@هويدي

من بعدكم :D

#18
'herch كتب:
@محمود

تعمل في التنقيب على الآثار :lol: الموضوع كتب من سنة وتراكمت عليه أطنان من الغبار وأثرت فيه عوامل التعربة ومرت عليه حضارات وشعوب مختلفة ...

@هويدي

من بعدكم :D

ههههههههه

ما انا بحب الاثار الكويسه :)

Software Developer
Mahmoudkelany.com


 

#19

جزاك االله خيرا

#20

جهد تشكر عليه .. وان كان من الآثار!  :lol:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#21

والله مع انه من الآثار لكنه موضوع رائع وللامانة اول مرة اراه وسعدت بمحتواه

شكرا اخي الكريم

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#22
herch كتب:

JXTable

هذا المكون الذي يرث من JTable يضيف عدة أشياء لهذه الأخيرة.

يمكننا ترتيب الاسطر فقط بنقرة على عنوان العمود الذي نريد الترتيب حسب قيمه.

يمكننا تغيير مكان الأعمدة فقط بعمل drag&drop.

بالإضافة إلى مزايا أخرى

عملية إنشاء كائن JXTable شبيهة بتلك الخاصة بJTable. يمكننا أن نمرر للconstructor كائن TableModel أو نمرر مصفوفات تحتوي على القيم وأسماء الأعمدة

 

String[][] rowData = {{"Issam", "24", "Male"}, {"Samir", "26", "Male"},
						{"Sophia", "30", "Female"}, {"Younes", "13", "Male"},
						{"Asmaa", "40", "Female"}};
String[] columnNames = {"Name", "Age", "Sexe"};
JXTable table = new JXTable(rowData, columnNames);

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

table.setColumnControlVisible(true);
وكما قمنا بذلك مع jxlist، فإنه يمكن تغيير ألوان الجدول بسهولة، باستعمال الHighlighter طبعا.

مثلا

table.addHighlighter(HighlighterFactory.createSimpleStriping());
يعطي النتيجة التالية

attachicon.gifjxtable.png

لمعرفة الHighlighters المتوفرة يمكنكم الرجوع إلى الjavadoc الخاصة بswingx.

وهذا مثال

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.decorator.HighlighterFactory;

public class JXTableTest extends JFrame {

	JXTable table;

	public JXTableTest() {
		String[][] rowData = {{"Issam", "24", "Male"}, {"Samir", "26", "Male"},
								{"Sophia", "30", "Female"}, {"Younes", "13", "Male"},
								{"Asmaa", "40", "Female"}};
		String[] columnNames = {"Name", "Age", "Sexe"};
		table = new JXTable(rowData, columnNames);
		table.addHighlighter(HighlighterFactory.createSimpleStriping());
		table.setColumnControlVisible(true);
		add(new JScrollPane(table));
		setSize(300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			public void run() {
				new JXTableTest();
			}
		});
	}
}

 

herch كتب:

JXTaskPane

attachicon.gifjxtaskpane.png

هذا المكون شبيه بالإطار الموجود في يسار windows explorer.

في الصورة أعلاه لدينا ثلاث إطارات، كل إطار يمثل JXTaskPane. ويجب إضافتها إلى حاوي خاص بها وهو JXTaskPaneContainer

ننشئ الJXTaskPane

 

JXTaskPane taskPane1 = new JXTaskPane();
نحدد العنوان الذي سيظهر في أعلى الإطار

taskPane1.setTitle("Manage files");
نضيف الإطار إلى الحاوي

JXTaskPaneContainer container = new JXTaskPaneContainer();
container.add(taskPane1);

يمكن إضافة أي مكون Swing إلى JXTaskPane، وستظهر بشكلها العادي، كما يمكن إضافة أي كائن يعمل implement للinterface Action، وستظهر على شكل رابط، كما هو ظاهر في الإطار الأول في الصورة

Action act = new AbstractAction("Open file") {

	public void actionPerformed(ActionEvent e) {
		new JFileChooser().showOpenDialog(null);
	}
};
taskPane1.add(act);

المثال الكامل في المرفقات

السلام عليكم

استفسار لأخي العزيز عملت الكود بتاعك وشتغل كويس بس عندما عملت استدعاء شاشة من Open File لم تعمل لو كمان مثال مع استدعاء الشاشات بارك الله فيك اخي العزيز

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