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

سؤال في GUI ، تحديث قيمة حقل النص تلقائياً

مغلق
بدأه iyadhoo في 30 أبريل 2006 · 7 رد · 671 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

السادة الخبراء أرجو المساعدة:

لدي الcode التالي:

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

public class AddFile extends JFrame{
	private TitledBorder brdr;
	private JFileChooser ofd;
	private JComboBox project_no;
        private JComboBox code_box;
        private JTextField date_field;
	private JTextField file_path;
	private JTextField code_text;
        private JButton browse;
        private JPanel panel;
	private int num=5;
        String projects[]=new String[num];
	private Container cont;

  

	public AddFile(){
  super("Add new file");
                this.setSize(300,200);
  this.setResizable(false);
                cont = this.getContentPane();
  brdr = new TitledBorder("Add file");
  
  ofd= new JFileChooser();
  
  
  panel= new JPanel();
  panel.setLayout(null);
  panel.setBorder(brdr);
  panel.setBounds(new Rectangle(5,5,300,200));
  
  browse=new JButton("Browse...");

                date_field = new JTextField();
  file_path = new JTextField();
  code_text = new JTextField();
  String codes[]={"فاتورة","مخطط","رسم"};
                code_box= new JComboBox(codes);
  
  Integer j = new Integer(0);
                for(int i=0;i<num;i++){
                        j=i+1;
                        projects= j.toString();
  }
  project_no = new JComboBox(projects);

  
                project_no.setLocation(20,30);
                project_no.setSize(50,20);
                code_box.setLocation(85,30);
                code_box.setSize(50,20);
                browse.setSize(100,20);
                browse.setLocation(100,120);
                date_field.setBounds(new Rectangle(150,30,120,20));
  file_path.setBounds(new Rectangle(150,60,120,20));
  code_text.setBounds(new Rectangle(150,150,120,20));
  
  
  
//هنا الشؤال  code_text.setText(project_no.getSelectedItem().toString() + "-" + code_box.getSelectedItem().toString() + "-" + date_field.getText());
  
  
  
  panel.add(project_no);
                panel.add(code_box);
                panel.add(browse);
                panel.add(date_field);
  panel.add(file_path);
  panel.add(code_text);
                cont.add(panel);
  
  browse.addActionListener(new ActionListener()
  {
 	 public void actionPerformed(ActionEvent e)
                        {
                               int i= ofd.showOpenDialog(AddFile.this);
          if (i==JFileChooser.CANCEL_OPTION)     
   	 file_path.setText("");  
    else
   	 file_path.setText(ofd.getSelectedFile().getPath());
   	 
                        }
                });  
 	 
	}

}

سؤالي هو كيف أستطيع أن أجعل محتويات حقل النص المسمى code_text تعبأ بشكل ديناميكي أي عندما يقوم المستخدم بتغيير قيمة أحد المكونات الأخرى تتغير قيمة هذا الحقل

لقد حاولت محاولات كثير لكن لم أنجح فمن عنده معلومة الرجاء إفادتي ولكم جزيل الشكر!

فحنوت ألثم جرحه الرعافَ فانتكأت جراحي..

وهمت على خدي الدموع فقلت يا روحي وراحي..

هلّا رحمتَ قلوبنا .. وعدلت عن هذا الرّواحِ ِ ..؟

فأجابني البطل المسجّى هازئاً بيَ .. باقتراحي

كفكف دموعك ليس في عبراتك الحرّى ارتياحي

هذي سبيلي .. إن صدقت محبتي .. فاحمل سلاحي

Sun Certified Java Programmer

#2

على حسب ما فهمت من سؤالك انك تريد اذا تغيرت القيم في

JComboBox project_no

JComboBox code_box

ان تتغير قيمة الـ code_text

يمكن عمل ذلك بعمل Action Listener على كل من code_box و project_no

في الـ Action لكل قائمة اختيار ( ComboBox)

تقوم بعمل :

code_text.setText(project_no.getSelectedItem().toString() + "-" + code_box.getSelectedItem().toString() + "-" + date_field.getText());

منقطع من حين لاخر

#3

شكراً جزيلاً أبو الفؤاد على ردك .. ما قلته صحيح

لكن ألا توجد طريقة أخرى .. في حال كان لدي العدي من المكونات فإن هذا سيكون شاقاً

فحنوت ألثم جرحه الرعافَ فانتكأت جراحي..

وهمت على خدي الدموع فقلت يا روحي وراحي..

هلّا رحمتَ قلوبنا .. وعدلت عن هذا الرّواحِ ِ ..؟

فأجابني البطل المسجّى هازئاً بيَ .. باقتراحي

كفكف دموعك ليس في عبراتك الحرّى ارتياحي

هذي سبيلي .. إن صدقت محبتي .. فاحمل سلاحي

Sun Certified Java Programmer

#4

اجعل كل المكونات إذا تحدث أيا منها أن تنادي على أمر مثلا: updateAllMyComponents()

وفي هذا الأمر،، حدث كل الComponents التي تريد!

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

#5

نعم هنالك عدة طرق

منها ما ذكرها الاخوان من استخدام اللسنرس المناسبات لمعرفة وقوع التغير في كومبونت معين لانزال التغيير في الكومبوننت المراد تغييره

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

تحياتي

لا بد من صنعاء وان طال السفر

#6

هذا كود بسيط يحتوي على JComboBox و JTextField

يعمل على تغيير قيمة النص في ال JTextField اذا طرأ أي تغيير على ال JComboBox

أعتقد ان هذا المثال يمكن أن يفيدك في طلبك

/**
 *
 * @author  Hadi Alnabris
 */
public class Hadi1 extends javax.swing.JFrame {

    public Hadi1() {
        initComponents();
    }

    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jComboBox1 = new javax.swing.JComboBox();
        jTextField1 = new javax.swing.JTextField();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jPanel1.setLayout(null);

        jPanel1.setBorder(new javax.swing.border.EtchedBorder());
        jComboBox1.setEditable(true);
        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Hadi", "Ahmad", "Ali", "Sa3eed", "Abdurrahman", "Salladeen" }));
        jComboBox1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jComboBox1ItemStateChanged(evt);
            }
        });

        jPanel1.add(jComboBox1);
        jComboBox1.setBounds(110, 30, 110, 19);

        jPanel1.add(jTextField1);
        jTextField1.setBounds(70, 120, 190, 20);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(20, 20, 350, 260);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-400)/2, (screenSize.height-321)/2, 400, 321);
    }

    private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {

      jTextField1.setText(jComboBox1.getSelectedItem().toString());
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    

    public static void main(String args[]) {
        new Hadi1().show();
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration
    
}
#7

الأخوة :

alnabris

san3aniJava

أبو مازن

شكراً جزيلاً لكم على مروركم وردكم :)

لكن أخي أبو مازن لم أفهم ردك :

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

أرجو منك التوضيح .. أملاً في الفائدة

فحنوت ألثم جرحه الرعافَ فانتكأت جراحي..

وهمت على خدي الدموع فقلت يا روحي وراحي..

هلّا رحمتَ قلوبنا .. وعدلت عن هذا الرّواحِ ِ ..؟

فأجابني البطل المسجّى هازئاً بيَ .. باقتراحي

كفكف دموعك ليس في عبراتك الحرّى ارتياحي

هذي سبيلي .. إن صدقت محبتي .. فاحمل سلاحي

Sun Certified Java Programmer

#8
اقتباس
لكن ألا توجد طريقة أخرى .. في حال كان لدي العدي من المكونات فإن هذا سيكون شاقاً

سأجاوبك بإذن الله،، إذا وضعت محاولتك!

بالتوفيق!

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

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