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

برنامج ال Word مبسط

رائج
بدأه mr.beshoy في 25 يونيو 2009 · 183 رد · 9,034 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#76

وهل لهذا فائدة في أداء الشيفرة أو في كمية الذاكرة؟

تحياتي

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

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

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

728x90.png

#77
اقتباس
وهل لهذا فائدة في أداء الشيفرة أو في كمية الذاكرة؟

لم أفهم سؤالك :wacko:

إذا كنت تعني هل لهذا تأثير في الأداء والذاكرة فلا أظن، لأن الكائن Font الأول لم تعد توجد أي reference له، وبالتالي فإن الgarbage collector سيقوم بحذفه

#78

لماذا لم يعد يوجد أى reference له ؟؟؟

----------------------------------------------------------------

هنا معى مشكلة :

----------------------

عندما نعمل معاينة على كلمة Test or sample كما عند مستر عصام

نريد أن نجعل هذا يؤثر بدوره على مانكتبه فى ال textArea

فقررت عمل ذاك

فى الكلاس الكبير خالص TextEditor

قمت بعمل الدالة هذه و لكن الأختيارات الى اختارها لا تؤثر على الكلام الذى اكتبه فى ال textarea

فهل تلك خاطئة أم مش مضبوطة جيداً :

  public void fontEffect() {
		new FontClass().applayButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				area.setFont(new Font(new FontClass().selectedFontName, new FontClass().selectedFontStyle,
						new FontClass().selectedFontSize));
				new FontClass().setVisible(false);
			}
		});
	}

تلميحة بسيطة الهدف من أنى كتب هذا السطر

	new FontClass().setVisible(false);

أقصد به عندما تختار ما تختاره من حجم و اسم و نوع الخط

اخفى ال Dilog الخاص بال font

تذكروا جيداً أن هذه الدالة فى الكلاس TextEditor ليس فى الكلاس FontClass

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 26 يوليو 2009 في 15:11

#79

يا أخي حرام عليك، مازلت تقوم بنفس الشيء رغم الذي قلته لك


new FontClass().selectedFontSize));
new FontClass().setVisible(false);
 area.setFont(new Font(new FontClass().selectedFontName, new FontClass().selectedFontStyle,

هنا أيضا تنشئ أربع كائنات مستقلة عن بعضها... لماذا تقوم بهذا؟؟؟؟؟!!!!!!!!!!!!!!!!

لماذا لا تفعل


fc.setSize(...)
fc.setVisible(..)
...................
fc.selectedFontName .... fc.selectedFontStyle
 FontClass fc = new FontClass();

لماذا لا تستعمل reference واحدة داخل الكلاس TextEditor بدل إنشاء كائن جديد كل مرة، وبالطبع ما ستطبقه على واحد لن ينطبق على الآخر

يعني كل الذي قيل لم تاخده بعين الإعتبار، هذا إذا كنت قرأته أصلا... لأنك تعيد نفس الأخطاء

#80

لالالا قرأت و أقراكل كلمة تكتبها

و لكن انا نسيت القضية دى مش أكثر

و لكن الأن ثبتت الفكرة و فهمتها جدا جدا

و بقى الخط يأثر تمام فى ال TextArea

و أدى الشفيرة يا عم :

	private void fontProperties(ActionEvent e) {
		final FontClass fontClass = new FontClass();
		if (e.getSource() == formatMenuItems[0]) {
			fontClass.setSize(new Dimension(500, 400));
			fontClass.setLocationRelativeTo(null);
			fontClass.setVisible(true);
			fontClass.setResizable(false);
		}
		fontClass.applayButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				area.setFont(new Font(fontClass.selectedFontName, fontClass.selectedFontStyle, fontClass.selectedFontSize));
				fontClass.setVisible(false);
			}
		});

	}

و أكر ثانية أنا أقرا و أهتم بما يُكتب و لكن المضوع كان غايب عن ذهنى

لكن المرة دى فهمته أكثر جداً

شكراً و متزقش كده تانى مرة :lol:

سلام

#81

أقصد هل هناك ما يدعو أن لا أستخدم صانع الكائنات واستخدم الدالة deriveFont??

على كل موضوع الاعتماد على gc في كل شيء قد لا يحمد عقباه

تحياتي

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

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

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

728x90.png

#82

في كلتا الحالتين يتم إنشاء كائن Font جديد، لكن استعمال deriveFont يقوم بreplication للكائن القديم يعني له نفس الخصائص -- إسم الخط والحجم والstyle-- ومن ثم تغير الخاصية التي تريد حسب الparameter الذي تمرره للميثود

#83

عندما راجعت الشيفرة الخاصة بهذه الفئة

وجدته يقوم بعمل استنساخ cloning للخصائص

هل صن تنصح باستخدام إحدى الطريقتين؟؟؟

شكل بيشوي هيقتلني قلبت الموضوع أسئلة :lol:

تحياتي

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

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

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

728x90.png

#84

معلومات جيدة ....

-----------------------------

كنت فى مغامرة عنيفة هذه السهرة لا أقول على أولها لعلى أتغلب عليها هو أنا تغلبت عليها تغلب جزئى و ليس كلى

-------------------------------------------------------

و لكن فى لمشكلة دى مش قادر أسكت عليها

لأنى مش عارف فين الغلط اصلاً

و ال مكتوب سليم

بكل بساطة انا أضفت buttons جديدة

خاصة بال center , left,right,Bold,color , underline

و هكذا

الزراير ياجدعان بتظهر بس الصور مش ظاهرة عليها

هتقولى يمكن الإمتداد يمكن مش كاتب صح يمكن يمكن

هقولك ما يمكنش

مشكلة بسيطة و المشكلة انها عبيطة ياريت فيها فن

ادى يا أحبائى ال code كله اتطلعوا عليه و قولولى ايه الى بيحصل يمكن انا فقدت نظرى و لا حاجة

Text.rar

#85

أستعمل deriveFont لأني حينها لست مضطرا لمعرفة إسم الخط الجاري استعماله والذي سيتم استعماله، أو خصائصه الأخرى التي سأكون مضطرا لتمريرها للconstructor إذا استعملته

بالنسبة لمشكلتك يا عاطف، فهي من الصور

استعمل صور أخرى، وضعت لك بعض الصور في المرفقات وهي تظهر بشكل جيد، بالطبع يجب تغيير الأسماء في الشيفرة لأنها صور png وليس jpg

images.zip

#86

سلام

----

أولا انظروا الصورة المرفقة

سترون الزرار الخامس حسب ترتيبه فى ال Array " A "

مختص بالخط Bold

الإضافات التى ضفتها على ال class TextEditor

Font type;
 private String[] images = {"new.JPG", "open.JPG", "save.JPG", "copy.JPG", "paste.JPG", "b.jpg", "i.jpg", "u.jpg", "a.jpg", "left.jpg", "center.jpg", "right.jpg", "align.jpg"};
    private String[] imageName = {"new", "open", "save", "copy", "paste", "Bold", "Italic", "underLine", "Color", "Left", "Center", "Right", "Align"};

لو نظرنم بداخل الدالة actionPerformed هناك الدالة fontProperties(e)

أضفت عليها الكود المتعلق بانى عندما اضغط على الزر " A"

يجعل الخط Bold

و لكن عندما أضغط عليه يعطينى Nullpointerexception

لماذا هل انا عامل شئ خاطى فيها

نص الدالة ( السطور التى أمامها كومنت هى التى تم إضافتها )

-------

    private void fontProperties(ActionEvent e) {
        final FontClass fontClass = new FontClass();
        if (e.getSource() == formatMenuItems[0]) {
            fontClass.setSize(new Dimension(500, 400));
            fontClass.setLocationRelativeTo(null);
            fontClass.setVisible(true);
            fontClass.setResizable(false);
        }
        fontClass.applayButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                area.setFont(new Font(fontClass.selectedFontName, fontClass.selectedFontStyle, fontClass.selectedFontSize));
                fontClass.setVisible(false);
            }
        });
//        if (e.getSource() == buttons[5]) {
//            type=type.deriveFont(Font.BOLD);
//            area.setFont(type);
//        }
    }

شكرا و شكرا على الصور ياعصام

سلام

post-166855-1248714416_thumb.jpg

تم تعديل هذه المشاركة بواسطة mr.beshoy في 27 يوليو 2009 في 20:11

#87

نقطة جيدة نوعاً ما أخ عصام

فعلاً الصور خاصتك فيها مشكلة

حاولت أن أصل إلى السبب بالضبط

لكن جافا لم تستطع تحميل الصورة من الأصل

تحياتي

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

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

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

728x90.png

#88

ما هي type التي عندك في الكود؟؟

ثانيا الكود الذي تريده أن ينفذ عند الضغط على زر bold ليس مكانه داخل fontproperties()

تذكر هذا السطر الذي كتبته في intializeIcons()

buttons.addActionListener(this);

يعني لازم تكتب الكود في الميثود actionPerformed الموجودة في TextEditor

ولازم أيضا إزالة السطور التي كنت كاتبها


if (e.getSource() == buttons[5]) {
//type=type.deriveFont(Font.BOLD);
area.setFont(area.getFont().deriveFont(Font.BOLD));
}

/*openFileDialog(e);
saveFile(e);
copyCutPastetText(e);
undoOperation(e);
fontProperties(e);
aboutMe(e);*/
}
public void actionPerformed(ActionEvent e) {

#89

قبل أن أجرب كلامك

الدالة fontProperties

موجودة فى ال actionPerformed

بص على الكود الكامل

يعنى كتبت فى ال actionPerformed

كتبت فى ال fontProperties

العملية واحد

----------------------------------------------------------------

type ده متغير من نوع Font

------------------------------------------------------------------

الآن جربتها :

---------------

	private void fontProperties(ActionEvent e) {
		final FontClass fontClass = new FontClass();
		if (e.getSource() == formatMenuItems[0]) {
			fontClass.setSize(new Dimension(500, 400));
			fontClass.setLocationRelativeTo(null);
			fontClass.setVisible(true);
			fontClass.setResizable(false);
		}
		fontClass.applayButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				area.setFont(new Font(fontClass.selectedFontName, fontClass.selectedFontStyle, fontClass.selectedFontSize));
				fontClass.setVisible(false);
			}
		});
		if (e.getSource() == buttons[5]) {
			area.setFont(area.getFont().deriveFont(Font.BOLD));
		}
		if (e.getSource() == buttons[6]) {
			area.setFont(area.getFont().deriveFont(Font.ITALIC));
		}
	}

المشكلة مش انى كنت واضع الكود فى ال fontproperties(e)

لالالا

المشكلة انى كنت بعمل كده :

type=type.deriveFont(Font.BOLD);
			area.setFont(area.getFont().deriveFont(Font.BOLD));

بس ايه العيب فى كده ؟؟

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 28 يوليو 2009 في 00:33

#90

قبل ما أجيلك لمصر، إقرا الكود اللي أنت كتبته

أولا أنت واضعه خارج الactionPerformed

تانيا الالactionPerformed الذي تتكلم عنه خاص بالزر applayButton، شوف بنفسك


fontClass.applayButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
area.setFont(new Font(fontClass.selectedFontName, fontClass.selectedFontStyle, fontClass.selectedFontSize));
fontClass.setVisible(false);
}
});//end of actionPerformed
//all this is out of the method actionPerformed
// if (e.getSource() == buttons[5]) {
// type=type.deriveFont(Font.BOLD);
// area.setFont(type);
// }
}
   //this ActionListener object is specific to applyButton

ثالثا والأهم، الكود اشتغل بعد ما قمت بالتغييرات الليي نصحتك بها

رابعا وأخيرا، أنا لا أحاول أغلطك، إذا كان غلط أقول لك غلط، إذا كان صحيح أقول لك صحيح

#91

يا أخى أنا لا أُجادل معك

أنا أُناقش فقط بهدف معرفة شئ ما

و لك الحق فى أن تُغلطنى و تقول لى خطئ :)

أنا لما كنت بقول نكتبها فى ال ActionPerformed

اقصد بما أن الدالة fontproperties موجودة فى ال actionPerofrmed

فكتابة السطور السابقة فى ال actionPerformed ذات نفسها هو نفسه لو كتبنا

فى ال fontproperties

على اية حال مشكور على المعلومة

#92

عُدنا معكم .....

فى محاولة جعل النص يتحرك إلى اليمين أو إلى الشمال

فلجأت لهذه الطريقة و لكنها لا تعمل ...

 if (e.getSource() == buttons[9]) {
			area.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		}
		if (e.getSource() == buttons[11]) {
			area.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		}

جربت استعمل بدل TextArea جعلتها TextPane

حيث توجد الدالة getParagraphAttributes()

ولكن لم أعرف كيف من خلالها احرك النص للمكتوب يميناً أو يساراً

و هناك ايضاً الدالة getStyledocument ()

ممكن تُتعمل لتحري النص لكن حاولت اجيب فيها يمين أجيب فيها شمال مش عرفت

شكراً

#93

مازالت المشكلة قائمة

من خلال البحث تعرف على method تُسمى (

int)moveCaretPosition

فا ستعملتها كالآتى : -

	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==buttons[0]){
		//   area.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
			area.moveCaretPosition((int) JTextArea.RIGHT_ALIGNMENT);

		}
		if(e.getSource()==buttons[1]){
		   // area.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
			area.moveCaretPosition((int)JTextArea.LEFT_ALIGNMENT);
		}
		if(e.getSource()==buttons[2]){
			area.moveCaretPosition((int)JTextArea.CENTER_ALIGNMENT);
		}
	}

buttons[0] >> left

buttons[1]>>right

buttons[2] >> center

مش عارف ايه السبب فى عدم عملها .... :angry:

#94

setComponentOrientation تعمل يشكل جيد

وهذا مثال بسيط جربت به إن كانت تعمل أم لا


import java.awt.event.*;
import java.awt.*;

public class TestTextArea {
public static void main(String[] args) {
final JTextArea txt = new JTextArea();
JScrollPane scroll = new JScrollPane(txt);
JFrame frm = new JFrame();
frm.add(scroll);
JButton left = new JButton("left");
left.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
txt.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
}
});
JButton right = new JButton("right");
right.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
txt.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
});
frm.setSize(400, 400);
JPanel pn = new JPanel();
pn.add(right);
pn.add(left);
frm.add(pn, BorderLayout.SOUTH);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
import javax.swing.*;

#95

يا سبحان الله اشتغلت مش عارف ايه السبب

بس المشكلة أن مش عطيك خاصية انك تجل الكلام فى ال center

هل فى خاصية ليهها ممكن تكون غايبة عنى و لا لازم أكودها بنفسى

------------------------------------------

طب ايه السبب الى بيجعل هذه الطريقة غير صالحة

	area.moveCaretPosition((int)JTextArea.LEFT_ALIGNMENT);

شكرا

تم تعديل هذه المشاركة بواسطة mr.beshoy في 29 يوليو 2009 في 00:30

#96

لانها لا تستعمل بتلك الطريقة

أنت لازم تعطيها رقم

يعني مثلا تقول له روح للموقع 50، الcursor سيكون عند الحرف الخمسين

وهي لا علاقة لها باليمين واليسار

تم تعديل هذه المشاركة بواسطة herch في 29 يوليو 2009 في 00:31

#97

ممم فهمتك

طب موضوع ال center هل له خاصية زى right_to_left

و لا لازم اعملها انا

انا مش لاقى خاصية صريحة ليها ..

#98

لا أعلم

سأبحث قليلا وأقول لك إذا وجدت أي شيء

#99

ما توصلت اليه لجعل ال text يتحرك للمنتصف كالآتى و لكنه محتاج تعديل :

هذه الدالة actionPerformed()

--------------------------------------------

	public void actionPerformed(ActionEvent e) {
		Graphics g = null;
		openFileDialog(e);
		saveFile(e);
		copyCutPastetText(e);
		undoOperation(e);
		fontProperties(e);
		aboutMe(e);
		if (e.getSource() == buttons[5]) {
			area.setFont(area.getFont().deriveFont(Font.BOLD));
		}
		if (e.getSource() == buttons[6]) {
			area.setFont(area.getFont().deriveFont(Font.ITALIC));
		}
		if (e.getSource() == buttons[7]) {
			AttributedString as = new AttributedString(area.getText());
			as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON,
					area.getText().charAt(0), area.getText().length());
		}
		if (e.getSource() == buttons[9]) {
			area.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		}
		if (e.getSource() == buttons[10]) {
			paint(g);
		}
		if (e.getSource() == buttons[11]) {
			area.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		}
	}

الذى أُضيف اليها :

Graphics g=null;

و الaction على button[10]>> centertt

		if (e.getSource() == buttons[10]) {
			paint(g);
		}

نرى أنه بيعمل calling للدالة paint و تلك التى بواسطتها نحرك النص

نص الدالة :

----------

	@Override
	public void paint(Graphics g) {
		int textHeight = area.getHeight();
		int textWidth = area.getWidth();
		int x = textWidth / 2;
		int y = textHeight / 2;
		g.drawString(area.getText(), x, y);
	}

أعلم أن بها خلل و لكن هذا ما توصلت له

و جارية المحاولات ....بس ياريت لو توصلت يا أخ عصام أو أى من الزملاء الأفاضل يفيدنا

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 29 يوليو 2009 في 01:05

#100

يبدو أنه لا توجد طريقة لفعل مل تريد بJTextArea

إستعمل مكانها JTextPane، وهذا مثال يستخدم JTextPane ويتيح لك وضع النص في اليمين واليسار والوسط


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

public class TestJTextPane {
public static void main(String[] args) {
final JTextPane txt = new JTextPane();
JScrollPane scroll = new JScrollPane(txt);

JFrame frm = new JFrame();
frm.add(scroll);
JButton left = new JButton("left");
left.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
StyleConstants.setAlignment(txt.getLogicalStyle(), StyleConstants.ALIGN_LEFT);
txt.requestFocusInWindow();
}
});
JButton right = new JButton("right");
right.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
StyleConstants.setAlignment(txt.getLogicalStyle(), StyleConstants.ALIGN_RIGHT);
txt.requestFocusInWindow();
}
});
JButton center = new JButton("center");
center.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
StyleConstants.setAlignment(txt.getLogicalStyle(), StyleConstants.ALIGN_CENTER);
txt.requestFocusInWindow();
}
});
frm.setSize(400, 400);
JPanel pn = new JPanel();
pn.add(left);
pn.add(center);
pn.add(right);
frm.add(pn, BorderLayout.SOUTH);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
import javax.swing.*;

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

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

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

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

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