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

مساعده في انشاء مصفوفه من RadioGroup

مغلق
بدأه - a l t - في 15 سبتمبر 2005 · 2 رد · 476 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ابي اجعل الفقرات الاربع لكل سؤال في ButtonGroup

مع ملاحظه ان ButtonGroup مصفوفه تزيد تلقائيا مع زياده عدد الاسئله

هذ االكود

package examination;
import javax.swing.*;
import java.awt.*;
public class CreateJTabbedPanel extends JFrame{

	private JTabbedPane jTabbedPane;
	private JPanel arrayJPanel[];
	private JTextArea arrayJTextArea[];
	private JRadioButton jRadioButton[][];
	private ButtonGroup buttonGroup[];  /********************/
	private int questionKit, numberColumn, count;

	CreateJTabbedPanel(){
  super("examination");
  questionKit = 5;
  numberColumn   = 4;
  count  = 1;
  jTabbedPane = new JTabbedPane();
  jTabbedPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
  createJTextAreaInJPanel(questionKit);
  getContentPane().add(jTabbedPane, java.awt.BorderLayout.CENTER);
	}

	private void createJTextAreaInJPanel(int kits){
  arrayJPanel    = new JPanel[kits];
  arrayJTextArea = new JTextArea[kits];
  jRadioButton = new JRadioButton[kits][numberColumn];
  buttonGroup = new ButtonGroup[kits];    /**********************/
  for ( int i = 0; i < arrayJPanel.length; ++i){
 	 arrayJPanel = new JPanel();
 	 arrayJPanel.setLayout(null);
 	 arrayJPanel.add(interfaceJPanel(arrayJTextArea));
 	 for ( int j = 0, x=30, y=280, w=930, h=35; j < numberColumn; ++j , y+=50){
    arrayJPanel.add(createJRadioButtonInJPanel(jRadioButton[j], i, j, x, y, w, h));
 	 }
  jTabbedPane.addTab("\u0627\u0644\u0640\u0633\u0640\u0640\u0624\u0627\u0644" + "  " + ( i + 1 ) , arrayJPanel);
  }
	}

	private JTextArea interfaceJPanel(JTextArea jTextArea){
 	 jTextArea   = new JTextArea();
 	 jTextArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
 	 jTextArea.setFont(new Font("Serif", 0, 18));
       	 jTextArea.setForeground(new Color(204, 0, 51));
       	 jTextArea.setBackground(new java.awt.Color(250, 227, 227));
 	 jTextArea.setBorder(new javax.swing.border.LineBorder(new Color(102, 0, 51), 2));
 	 jTextArea.setBounds(20, 20, 950, 250);
 	 return jTextArea;  
	}

	private JRadioButton createJRadioButtonInJPanel(JRadioButton jRadioButton,int i, int j, int x,int y, int w, int h){
  jRadioButton = new JRadioButton();
  interfaceJRadioButton(jRadioButton);
  jRadioButton.setBounds(x, y, w, h);
  jRadioButton.setText("\u0627\u0644\u0641\u0640\u0642\u0640\u0631\u0647"+
        "   " + (j+1) +"   "+
     	 "\u0645\u0640\u0646 \u0627\u0644\u0640\u0640\u0633\u0640\u0624\u0627\u0644"+
        "    "+ (i+1));
  return jRadioButton;
	}

	private JRadioButton interfaceJRadioButton(JRadioButton jRadioButton){
  jRadioButton.setBackground(new Color(234, 234, 251));
        jRadioButton.setFont(new Font("Tahoma", 0, 12));
        jRadioButton.setForeground(new Color(0, 0, 153));
        jRadioButton.setHorizontalAlignment(SwingConstants.RIGHT);
        jRadioButton.setHorizontalTextPosition(SwingConstants.LEFT);
  return jRadioButton;
	}

	public static void main(String [] args ){
  JFrame frame = new CreateJTabbedPanel();
  
  frame.setSize(1000, 700);
  frame.setVisible(true);
	}
}

11_03_06_12_48_57_1142110137Image(_66).jpg

#2

سأحاول إدراج بعض النصائح:

1- جزء برنامجك إلى مكونات أو إلى كائنات مفهومة! فأنت تستخدم لغة كائنية:

هذه الفئة تمثل السؤال مع عدة أجوبة، لاحظ أنها تحوي فقط بيانات وليس لها علاقة بالواجهة الرسومية أبدا!

package questions;
import java.util.*;

public class Question{
	String question;
	List answers;
	String answer;
	public Question(String question, String answer, List otherAnswers){
  this.question=question;
  this.answer=answer;
  answers=new Vector();
  answers.add(answer);
  answers.addAll(otherAnswers);
	}
	/**The first answer is the right answer.*/
	public Question(String question, List answers){
  this(question, (String)answers.get(0), answers);
	}
	public String getQuestion(){
  return question;
	}
	public List getAnswers(){
  return new Vector(answers);
	}
	public String getAnswer(){
  return answer;
	}
}

هذه الفئة تمثل واجهة JPanel تظهر سؤالا واحدا والأجوبة المختلفة، لاحظ أن الأجوبة مواقعها ملخبطة! انظر إلى كيفية استخدام ButtonGroup! ولاحظ أن عدد JRadioButton تتغير على حسب عدد الأجوبة.

package questions.gui;
import javax.swing.*;
import questions.*;
import java.util.*;
public class QuestionPanel extends JPanel{
	Question question;
	ButtonGroup group;
	JTextArea area;
	public QuestionPanel(Question q){
  question=q;
  initComponents();
	}
	public String getChoice(){
  return group.getSelection().getActionCommand();
	}
	public boolean isChoiceCorrect(){
  return getChoice().equals(question.getAnswer());
	}
	private void initComponents(){
  area=new JTextArea();
  area.setText(question.getQuestion());
  JScrollPane pane=new JScrollPane(area);
  pane.setPreferredSize(new java.awt.Dimension(300,200));
  group=new ButtonGroup();
  setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
  add(pane);
  List<String> answers=question.getAnswers();
  Collections.shuffle(answers);
  for(String answer:answers){
 	 JRadioButton radio=new JRadioButton(answer);
 	 radio.setActionCommand(answer);
 	 add(radio);
 	 group.add(radio);
  }

	}

}

هذه الفئة تمثل مجموعة من الأسئلة تظهر في Panel واحد. لاحظ أنها تأخذ مجموعة من الأسئلة وتنشئ عدة QuestionPanel على حسب عدد الأسئلة!

package questions.gui;
import javax.swing.*;
import questions.*;
import java.util.*;

public class Form1 extends JPanel{
	List<Question>questions;
	public Form1(List<Question>q){
  questions=q;
  initComponenets();
	}
	private void initComponenets(){
  setLayout(new java.awt.GridLayout(1,1));
  JTabbedPane pane=new JTabbedPane();
  int i=0;
  for(Question q:questions){
 	 final QuestionPanel panel=new QuestionPanel(q);
 	 pane.add("Q "+(++i), panel);
 	 panel.add(new JButton(new AbstractAction("Check"){
    public void actionPerformed(java.awt.event.ActionEvent e){
   	 JOptionPane.showMessageDialog(Form1.this, "Answer is "+panel.isChoiceCorrect());
    }
 	 }));
  }
  add(pane);

	}
	private static List<String> getStringList(){
  Vector<String>v=new Vector<String>();
  int n=(int)(Math.random()*3+3);
  for(int i=0;i<n;i++)
 	 v.add("Wrong Answer "+i);
  System.out.println (v.size());
  return v;
	}
	public static void main(String[]args){
  JFrame frame=new JFrame();
  frame.setLayout(new java.awt.GridLayout(1,1));
  List<Question> qs=new Vector<Question>();
  for(int i=0;i<10;i++){
 	 qs.add(new Question("Question "+i, "Correct Answer", getStringList()));
  }
  frame.add(new Form1(qs));
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.pack();

  frame.setVisible(true);

	}

}

ربما الواجهة الرسومية التي صنعتها أنت جميلة جدا!، لكن التعديل عليها وإضافة الأوامر الجديدة أصعب من هذه! انظر إلى عدد المصفوفات التي أنشأتها أنت مثلا مقارنة بالأسلوب المتبع هنا! وتستطيع أيضا أن تعدل في الشكل بسهولة في الشفرة الجديدة!

هذه دعوة مني إلى محاولة ترتيب الشفرات حتى تستطيع تطويرها بسرعة!!

بالتوفيق!!

#3

الله يثيبك ويرحم والديك يا ابو مازن ..

بجرب الفئات و لي عودة ان شاء الله ،

11_03_06_12_48_57_1142110137Image(_66).jpg

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…