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

رسم BarChart باستخدام الـ JProgressBar

بدأه Mahmoud Kelany في 19 أكتوبر 2010 · 8 رد · 637 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

تحيه طيبه لكل عضو فى هذا المنتدى العظيم

ولكل احبائى الكرام :)

كان مطلوب منى ان اقوم بعمل barchart لنتيجه معينه

لجأت الى استعمال الجرافيكس فى ذلك ورسم مستطيلات ولكن وجدت انى لا استطيع ذلك

لاسباب كثيره واجهتنى

منها الرسم بطريقه ديناميكيه يعنى اعطيه عدد المستطيلات وهو يرسم

وكيفيه ملأ المستطيل من الاسفل وليس من الاعلى واسباب اخرى

فلجأت الى التفكير فى شىء اخر

وفوجدت ان لدى مكون جاهز فى الجافا JProgressBar

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

فحبيبت اشاركم بهذه الفكره

لعلها بدائيه وغير محبوبه لكن حاولت اتصرف tongue.giftongue.gif

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

/**
 *
 * @author Mahmoud Kelany
 */
public class BarChartComponent extends JPanel {

	private BarChart[] bars;
	private int maxValue;
	private int[] barValues;
	private String[] barNames;
	private boolean setStringPainted;
	private Color barColor = Color.BLUE;
	private int maxValueIndex;
	private int scale = 100;

	/**
 	*
 	* @param values
 	* @param names
 	*/
	public BarChartComponent(int[] barValues, String[] barNames) {
    	this.barValues = barValues;
    	this.barNames = barNames;
    	setStringPainted = true;
    	barColor = Color.blue;
    	addBarCharts();
	}

	private void addBarCharts() {
    	bars = new BarChart[barValues.length];
    	maxValue = barValues[0];
    	for (int i = 0; i < bars.length; i++) {
        	bars = new BarChart(JProgressBar.VERTICAL);
    	}
    	GridLayout layout = new GridLayout(1, bars.length);
    	setLayout(layout);
    	for (int i = 0; i < bars.length; i++) {
        	add(bars);
        	if (barValues > maxValue) {
            	maxValue = barValues;
            	maxValueIndex = i;
        	}
    	}
    	printBarCharts();
	}

	private void printBarCharts() {
    	for (int i = 0; i < bars.length; i++) {
        	bars.setForeground(barColor);
        	bars.setMaximum(maxValue + scale);
        	bars.setStringPainted(setStringPainted);
        	bars.setValue(barValues);
        	bars.setFont(new Font("Tohma", Font.BOLD, 12));
        	bars.setString(barNames + " = " + barValues);
        	bars.setToolTipText(barNames.concat(" , " + String.valueOf(barValues)));
    	}
    	bars[maxValueIndex].setForeground(Color.RED);
	}

	/**
 	* @return the maxValue
 	*/
	public int getMaxValue() {
    	return maxValue;
	}

	/**
 	* @return the values
 	*/
	public int[] getValues() {
    	return barValues;
	}

	/**
 	* @param values the values to set
 	*/
	public void setValues(int[] values) {
    	this.barValues = values;
	}

	/**
 	* @return the names
 	*/
	public String[] getNames() {
    	return barNames;
	}

	/**
 	* @param names the names to set
 	*/
	public void setNames(String[] names) {
    	this.barNames = names;
	}

	private class BarChart extends JProgressBar {

    	private BarChart(int orign) {
        	super(orign);
    	}
	}
}

وهذه هى كلاس التجربه

import javax.swing.JFrame;

/**
 *
 * @author Mahmoud Kelany
 */
public class BarTest extends JFrame {

	String names[] = {"A", "B", "C", "D", "F"};
	int values[] = {100, 140, 304, 130, 400};

	public BarTest() {
    	add(new BarChartComponent(values, names));
    	setSize(300, 300);
    	setLocationRelativeTo(null);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
    	new BarTest().setVisible(true);
	}
}

post-217802-006615800 1287485442_thumb.p

أكيد هيكون فيه تعليقات قاتله ليا علشان هذه الطريقه

لكن منتظر توجيهاتكم للرسم بطريقه افضل :)

المرفقات
barchart.png

Software Developer
Mahmoudkelany.com


 

#2

عزيزي محمود بالنسبه لقولك انك تصرفت، فانا شاهد ما تعطلت .

ولكن يوجد امثله كثيره هنا يمكنك الاستفاده منها http://www.java2s.com/Code/Java/Chart/Bar-Chart.htm

كما انه قد يفيدك هذا الصنف http://www.superliminal.com/sources/BarChart.java.html انا لم اجربه ولكني وجدته بالصدفه

بالتوفيق

#3
العيافـي كتب:

عزيزي محمود بالنسبه لقولك انك تصرفت، فانا شاهد ما تعطلت .

ولكن يوجد امثله كثيره هنا يمكنك الاستفاده منها http://www.java2s.co...t/Bar-Chart.htm

كما انه قد يفيدك هذا الصنف http://www.superlimi...Chart.java.html انا لم اجربه ولكني وجدته بالصدفه

بالتوفيق

اخى العيافى لم افهم

اقتباس

فانا شاهد ما تعطلت

لكن بالنسبه للامثله التى وضعتها انا شوفتها قبل ذلك

لكن هذه تستخدم مكتبه والمطلوب عملها بدون استخدام مكتبات

انما الرابط الاخر الذى وجدته بالصدفه

ايضا اطلعت عليه

لكن هناك SelectionSet class غير موجوده فى الكود

ولا اعلم على ماذا تعود

فلذلك لم اتمكن من مواصله الكود

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

Software Developer
Mahmoudkelany.com


 

#4

قصدت بانك لم تتوقف بل واصلت.

اما بالنسبه للصنف الثاني فهو على نفس الرابط ولكن غير اسم class

http://www.superliminal.com/sources/SelectionSet.java.html

#5
العيافـي كتب:

قصدت بانك لم تتوقف بل واصلت.

اما بالنسبه للصنف الثاني فهو على نفس الرابط ولكن غير اسم class

http://www.superlimi...onSet.java.html

امممم

دا الموضوع طلع كبير مش على ال2 كلاسسز بس

Axis.java

BarChart.java

FloatSlider.java

SelectionSet.java

SelectionSetListenter.java

حملتهم كلهم لكن الاكواد متداخله مع بعضها وهنا اكتر من خاصيه وليس البارشارت فقط

سحاول فهمهم باذن الله

شكرا اخى العيافى :)

Software Developer
Mahmoudkelany.com


 

#6

إيه الحلاوه دي يا محمود ..

أستاذ ..... أستاااااااذ

#7
هويدي كتب:

إيه الحلاوه دي يا محمود ..

أستاذ ..... أستاااااااذ

الله يخليك يا هويدى

بس استاذ فى الفبركه :D

صح wacko.gif

Software Developer
Mahmoudkelany.com


 

#8

مسمعتش المثل اللي بيقول ... الحجه أم محمد ...هههه .. قصدي الحاجه أم الإختراع .... :D....

#9

معلش اصل انا سمعى تقيل laugh.giflaugh.giflaugh.gif

بس طبعا هذه الطريقه غير شرعيه خالص tongue.giftongue.giftongue.gif

Software Developer
Mahmoudkelany.com


 

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