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

شرح : مربع نص يتغير حجمه كلما أدخل حرف أو مسح .

بدأه rohaili في 26 ديسمبر 2009 · 5 رد · 927 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

اللهم يا معلم آدم علمنا ويا مفهم سليمان فهمنا ، سبحانك لا علم لنا إلا ما علمتنا إنك أنت علام الغيوب .

الصنف التالي مشتق من مربع النص jtextfield مع إضافة أمران بسيطان إلى الدالة keytyped() ، يقوم هذان الأمران بإعادة رسم العناصر المرئية كلما أدخل المستخدم حرفاأو مسحه .

الصنف التالي يعمل إذا أضيف مربع النص داخل لوحة jpanel وليس أي حاوية أخرى .

وجزى الله خيرا من يطوره ليعمل داخل أي حاوية .


package textfieldautoresize;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TextFieldAutoResize extends JTextField {

public TextFieldAutoResize() {
this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent evt) {
KeyTyped(evt);
}
});
}

private void KeyTyped(KeyEvent evt) {
//إذا افترضنا أن مربع النص مضاف داخل لوحة فإن الدالة
//getparent()
//تعود بحاوية نحولها إلى لوحة لأننا نعرف مسبقا أنها لوحة

JPanel p = (JPanel) this.getParent();

//ثم نستدعي الدالة
//updateui()
//التي تقوم باعادة رسم العناصر المرئية

p.updateUI();

//لاحظ أن الأمران السابقان مكتوبان داخل الدالة
//keytyped
//أي سوف يتم استدعائهما كلما أدخل المستخدم حرفا أو مسحه
}
}

المشروع في المرفقات .

والحمد لله رب العالمين .

textfieldautoresize.zip

300_130.gif

#2

فكرة جميلة جدا، مع أني لم أفهم مبدأ اشتغالها :lol:

#3

مشكور اخي لكن يرجى بعض التوضيح

Linux for human beings

#4

اعتقد ان الدالة setPreferredSize ممكن تنفع

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#5

مبدع أخوي rohill

استفد كثير من مواضيعك الله يعطيك العافية

فكره حلوه وغريبه

ما أعتقد راح تلقى شئ تستفيد من الخاصية هذي فيه

بس مبدع :)

كان ودي أكمل المشوار بس للأسف متأسس غلط بالجافا وماشي بالبركه :wink:

#6

في الاول هو اضاف مستمع لنقرات الازرار

this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent evt) {
KeyTyped(evt);
}
});

و من خلالها قام باستدعاء ميثود من نفس class و هي

private void KeyTyped(KeyEvent evt)

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

لان الموءشر this في هذه الحالة يؤشر على current class

و لكن لو استدعاها من داخل المستمع نفسه

سوف توشر على المستمع نفسه لانه inner class

و الان في حالة اي نقر على اي زر سوف يتم استدعاء

private void KeyTyped(KeyEvent evt)

والتي فيها يتم اخد الاب لهذا الكائن

اي المنطقة التي تحتضنه و التي مثلها ك JPanel

و في ال JPanel مبثود updateUI()

و التي تقوم بأعادة خصائص ال UI الخاصة فيه الى حالتها الاساسية

و منها يتم استدعاء مبثود revalidate() و التي بدورها تعيد حسابات ابعاد و خصائص هذا الكائن و بعدها يتم رسمه من جديد

باستدعاء repaint()

ارجو ان تكون وضحت هذه الامور

تم تعديل هذه المشاركة بواسطة Mohammed Mshari Ersan في 31 ديسمبر 2009 في 04:41

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

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

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

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

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