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

[مخالف - عنوان غير مناسب :]شرح برنامج بسيط عن JTextField

مغلق
بدأه issam-ahmed في 22 ديسمبر 2011 · 5 رد · 1,636 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخواني/أخواتي الكرام :

يوجد لدي برنامج و لا أعرف عمل بعض الأكواد بها أتمنى أن تفيدوني بذالك :

الكود



package textfieldtest;

// Fig. 11.9: TextFieldFrame.java
// Demonstrating the JTextField class.
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;

public class TextFieldFrame extends JFrame
{
private JTextField textField1; // text field with set size
private JTextField textField2; // text field constructed with text
private JTextField textField3; // text field with text and size
private JPasswordField passwordField; // password field with text

// TextFieldFrame constructor adds JTextFields to JFrame
public TextFieldFrame()
{
super( "Testing JTextField and JPasswordField" );
setLayout( new FlowLayout() ); // set frame layout

// construct textfield with 10 columns
textField1 = new JTextField( 10 );
add( textField1 ); // add textField1 to JFrame

// construct textfield with default text
textField2 = new JTextField( "Enter text here" );
add( textField2 ); // add textField2 to JFrame
// construct textfield with default text and 21 columns
textField3 = new JTextField( "Uneditable text field", 16 );
textField3.setEditable( false ); // disable editing
add( textField3 ); // add textField3 to JFrame

// construct passwordfield with default text
passwordField = new JPasswordField( "Hidden text" );
add( passwordField ); // add passwordField to JFrame

// register event handlers
TextFieldHandler handler = new TextFieldHandler();
textField1.addActionListener( handler );
textField2.addActionListener( handler );
textField3.addActionListener( handler );
passwordField.addActionListener( handler );
} // end TextFieldFrame constructor

// private inner class for event handling
private class TextFieldHandler implements ActionListener
{
// process text field events
public void actionPerformed( ActionEvent event )
{
String string = ""; // declare string to display

// user pressed Enter in JTextField textField1
if ( event.getSource() == textField1 )
string = String.format( "textField1: %s",
event.getActionCommand() );

// user pressed Enter in JTextField textField2
else if ( event.getSource() == textField2 )
string = String.format( "textField2: %s",
event.getActionCommand() );

// user pressed Enter in JTextField textField3
else if ( event.getSource() == textField3 )
string = String.format( "textField3: %s",
event.getActionCommand() );

// user pressed Enter in JTextField passwordField
else if ( event.getSource() == passwordField )
string = String.format( "passwordField: %s",
new String( passwordField.getPassword() ) );
// display JTextField content
JOptionPane.showMessageDialog( null, string );
} // end method actionPerformed
} // end private inner class TextFieldHandler
} // end class TextFieldFrame


يا ريت شرح الأسطر التالية :

ما المقصود ب TextFieldHandler و ما عملها و شو بتفرق عن TextField ؟؟



TextFieldHandler handler = new TextFieldHandler();

ما وظيفة الكود هذا ؟



textField1.addActionListener( handler );

أخيراً ما وظيفة هذا الكود



if ( event.getSource() == textField1 )
string = String.format( "textField1: %s",
event.getActionCommand() );

خاصة



string = String.format( "textField1: %s",

و الكود



event.getActionCommand() );

أي ماذا يقصد ب ActionCommand ؟

و بارك الله فيكم

−1
#2

السلام عليكم

TextFieldHander ليس كلمة مفتاحية بل اسم صنف class لاحظ

private class TextFieldHandler implements ActionListener

اي يمكن ان تستبدله باى اسم اخر

***

هذا السطر

private class TextFieldHandler implements ActionListener

يعنى ان الصنف TextFieldHandler يقوم ببناء الواجهة interface التى اسمها ActionListener

***

و هذا السطر

textField1.addActionListener( handler );

يعنى ان الصنف TextFieldHandler هو الذي سيستمع الى textField1

اي ان الشيفرة code الذي في هذا الصنف هي التى ستنفذ اذا حدث تغيير في textField1

******

هناك عدة واجهات يمكن ان تبنيها لكي تستمع لحدث ما

مثلا MouseListener تهتم بي الاحداث التى تقع في الفارة

وهناك keyListener التى ترصد الاحداث على لوحة المفاتيح

و هناك ActionListener ......الخ

*****

اما الطريقة method

event.getSource()

فهى المسؤلة عن ايجاد اى حقل من الحقول الاربعة هو المسول عن هذا الحدث

مثلا

if ( event.getSource() == textField1 )

هنا انت تسال اذا كان textField1 هو المسؤل عن هذا الحدث

********

لمزيد عن الlistener

اقرا هذا http://www.softcoded.com/web_design/java_listeners.php

1
#3

السلام عليكم

شكراً لك أخي على هذه الإجابات و لك تعقيبي عليها،،،

هالقيت إفهمت إنه TextFieldHandler هي عبارة عن صنف كلاس و يقوم ببناء الواجهة التي إسمها ActionListener

لكن لو ننظر في البرنامج نجد الجملة :



TextFieldHandler handler = new TextFieldHandler();


تأتي قبل تعريف الصنف TextFieldHandler و أنا أعرف إنه أول حاجة يجب أن نبني الصنف بعدين ناخد نسخة عنه بالكود السابق .

فهل هناك سبب جعلنا نأخذ نسخة عن الصنف بالكود التالي:



TextFieldHandler handler = new TextFieldHandler();

عن تعريف الصنف نفسه و هو



private class TextFieldHandler implements ActionListener

أم لا مشكلة إن إستبدلنا أماكنهم قبل أو بعد ؟

هذا التعقيب الأول أم الثاني فهو لو نظرنا على الجمل التالية :



if ( event.getSource() == textField1 )
string = String.format( "textField1: %s",
event.getActionCommand() );

// user pressed Enter in JTextField textField2
else if ( event.getSource() == textField2 )
string = String.format( "textField2: %s",
event.getActionCommand() );

// user pressed Enter in JTextField textField3
else if ( event.getSource() == textField3 )
string = String.format( "textField3: %s",
event.getActionCommand() );

// user pressed Enter in JTextField passwordField
else if ( event.getSource() == passwordField )
string = String.format( "passwordField: %s",
new String( passwordField.getPassword() ) );


نجد إنه كل فقرة تحتوي على event.getActionCommand() ); ما عدا الفقرة الأخيرة لا تحتوي على هذه الجملة، هذا من جانب و من الجانب الآخر أنا فاهم إنه معناها هو الحصول على

الإجراء الذي سوف ينفذ عند حدوث الحدث لكن أين هو الأجراء و ما الرابط الذي يربط هذه الجملة مع الإجراء أي كيف يفهم البرنامج مكان الإجراء و ينفذه من خلال هذه الجملة ؟

و شكراً لك أخي الكريم

#4
issam-ahmed كتب:

أم لا مشكلة إن إستبدلنا أماكنهم قبل أو بعد ؟

السلام عليكم

على حذ علمى نعم لانه صنف داخلى Inner class

قبل ام بعد ليس هناك مشكل

***

اما بخصوص even.getActionCommend اضن ان وظيفتها ان ترجع النص الذي بي ال JTextField

1
#5
sahraoui17 كتب:

اما بخصوص even.getActionCommend اضن ان وظيفتها ان ترجع النص الذي بي ال JTextField

أخي أعتقد إنه %s هذه الجزئية من الكود هي التي ترجع النص الموجود في JTextField و أنا جربت و حذفت هذا الرمز

و إشتغل البرنامج دون مشاكل عدا إنه لم يتم إرجاع النص الموجود في JTextField .

أما even.getActionCommend أعتقد لها علاقة بالكود التالي و الموجود مباشرة بعد if statments :



JOptionPane.showMessageDialog( null, string );

لكن لا أعرف كيف وجدت العلاقة بينهم ، أتمنى أي أخ أو أخت يشاهد الموضوع و ممكن يفيدنا يضع الإجابة و شكراً لكم

جميعاً و شكر خاص لك أخي الكريم sahraoui17

#6

الأخ الكريم/الأخت الكريمة

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

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

قواعد طرح المشاركات

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

1 −1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

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

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

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

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

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

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