السلام عليكم ورحمه الله وبركاته
تحيه طيبه لكل عضو فى هذا المنتدى العظيم
ولكل احبائى الكرام :)
كان مطلوب منى ان اقوم بعمل barchart لنتيجه معينه
لجأت الى استعمال الجرافيكس فى ذلك ورسم مستطيلات ولكن وجدت انى لا استطيع ذلك
لاسباب كثيره واجهتنى
منها الرسم بطريقه ديناميكيه يعنى اعطيه عدد المستطيلات وهو يرسم
وكيفيه ملأ المستطيل من الاسفل وليس من الاعلى واسباب اخرى
فلجأت الى التفكير فى شىء اخر
وفوجدت ان لدى مكون جاهز فى الجافا JProgressBar
فقولت استخدمه وهنا هاعرف اتحكم فى العدد وطريقه الملأ
فحبيبت اشاركم بهذه الفكره
لعلها بدائيه وغير محبوبه لكن حاولت اتصرف ![]()
![]()
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);
}
}أكيد هيكون فيه تعليقات قاتله ليا علشان هذه الطريقه
لكن منتظر توجيهاتكم للرسم بطريقه افضل :)