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

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

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

حقاً أنها طريقة صائبة

و لكن رجاء قل لى كيف وجدت هذه الطريقة أقصد تركيبتها من ناحية ال syntax لانى بحثت و بحثت و لم أجد ذاك أيضا فى الDoc غير مكتوب غير اسمها فقط ...

الدالة .requestFocusInWindow(); ما فائدتها ؟؟

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

و لكن هناك مشاكسات حدثت (( فاكر ايأم زمان لما كنا بنحاول نقراملف و نعمل copy - paste كانت أيام حلوة يا أخى :angry: ما صدقنا نسيناها و الأخ JTextPane

رجعنا ليها تانى

شوف الى حصل ياعم

لما كنا بنقرا من ملف كنا نستعمل تلك الخاصية

 area.append(record+"\n");

و طبعاً append خاصة بال JTextArea فقط

محتاجة البديل و نحن نبحث ..

لما كنا بنفذ خاصية ال paste

كنا نعمل كده :

area.insert(clipcontent, area.getCaretPosition());

طبعاً ال method inser() غير صالحة مع ال JTextPane

مشاكل صغيرة بس فى الصميم

شكراً

#102

بانسبة لل paste

استبدلت

الدالة insert

بهذه

 area.setText(clipcontent);

و اشتغلت

شكراً

أما الدالة

area.append(record)+"\n");

جربت استبدالها ب

 area.setText(recordd+"\n");

لم تصلُح

شكراً

#103

بالنسبة لكيف عرفت فقد بحتث في google وعرفت الكلاس التي يجب استعمالها ثم قرأت documentation الخاص بالكلاس

بالنسبة لsetText فهي تمسح كل ما كان يوجد من قبل وتعوضه بما مررته لها كparameter، فهي لا تعمل مثل append

هناك طريقة مباشرة لقراءة ملف ووضعه في JTextPane، وهي تعمل أيضا بالنسبة لJTextPane، وهي استعمال الميثود read والتي تنتظر object من صتف Reader


try {
reader = new BufferedReader(new FileReader("file.txt"));
jTextPane.read(reader, null);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
BufferedReader reader = null;

#104

أعلم يا رفيقى المبرمج أنك بحث فى جوجل :lol: و لكن أقصد أرنى المصدر الذى قرأته

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

للأسف الشديد الدالة المسئولة عن قراءة الملف لا تعمل جيداً تُعطى FileNotFormattedexception

لو نظرت فى الكود المرفق سابقاً ستجد الدالة openFileDilog

بها

   if (ressult == JFileChooser.APPROVE_OPTION) {
				readFile();

و هذه نص الدالة readFile :

private void readFile() {
		BufferedReader reader = null;
		try {
			area.setText("");
			reader = new BufferedReader(new FileReader("file.txt"));
			area.read(reader, null);
		} catch (IOException e) {
			// JOptionPane.showMessageDialog(null, "you get an IOException error!", "Error", JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
		} finally {
			try {
				reader.close();
			} catch (IOException io) {
				io.printStackTrace();
			}
		}
	}

كما كتبتها انت

طبعاً فى الأول الدال readFile كا مُرر لها أوجيكت من نوع File

شكراً

#105

لا أتذكر المصدر، ولا يوجد أصلا مصدر لأني لم آخد الحل كاملا من صفحة واحدة، فهذا يعطيك فكرة وآخر يعطيك إسم كلاس... إلخ، لكني بقيت تقريبا ساعة وأنا أقرأ الdocumentation حتى توصلت إلى الذي كتبته سابقا

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

الكود الذي أنا كتبته فقط مثال، يجب أن تعدله حتى يلائم الكود الذي كتبته أنت

جرب التالي


readFile(fc.getSelectedFile());
}
 if (ressult == JFileChooser.APPROVE_OPTION) {


BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
area.read(reader, null);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
 private void readFile(File file) {

#106

شكراً جزيلاً

#107

الشيفرة النهائية يا حج بيشوي

وأبلغني بالتحديثات

تحياتي

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

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

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

728x90.png

#108

ما تم إضافته هو تحريك النص لليمين أو المنتصف أو اليسار

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

أعلم أنى بطئ و كن هننهى الأمر لا تقلق

نحن اليوم فى محاولة لعمل المسطرة التى تظهر بشكل افقى و راسى للتحكم فى النص المكتوب

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

؟؟؟؟؟

ياريت لو لقيت مصدر بيشرح القصة هذه أعرضه لنا

أو أى أفكار حتى لو بسيطة جداً

شكراً مستر علاء

Text.rar

#109

هذه هى صورة البرنامج إلى أن توصلت له فى تللك اللحظة

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

توضيح فكرة عمل المسطرة :

توجد مسطرة أفقية أعلى ال TextPane

و مسطرة رأسية على الجانب الأيسر من ال TextPane

نفترض أن مقاس المسطرة الأفقية و الراسية

يبدأ من 1 و ينتهى عن 20

أى طولها 20 سم

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

المسطرة الرأسية هتكون على البانل التى على يسار ال TextPane

هتكون على الطرف كده يعنى

و المسطة الأفقية هتكون فوق ال TextPane

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

:الهدف منها

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

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

و لو تحرك المؤشر لأعلى يتحر النص لأعلى

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

بالنسبة للمسطرة الأفقية

إذا تحرك المؤشر لليمين يجعل النص كله ينمكش فى اتجاه اليمين

بالبلدى كده النص هيبقى مزنق فى بعضه :D

أما لو تحرك المؤشر فى اتجاه اليسار هيتمدد النص

عن وضعه السابق

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

عندما أقول كلمة مؤشر أقصد به الماوس يعنى الماوس هو الى هيأشر على المسطرة

و على حسب ما يأشر الماوس على حسب ما يتحرك النص

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

هدفى من سرد الفكرة هذه ...إذا كان هناك أحد لا يعرف ما هى المسطرة

أنا عمال اقرا فى حاجات بس لسة مش متوصل

و شكرا

post-166855-1248953015_thumb.jpg

#110

أعزائى المبرمجين و أصدقائى الأحباء :

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

تقرييا توصلت لفكرة المسطرة فسأعرض لكم التفكير المبدأى الذى لجأت له

الفكرة أنى اعتدمت على ال class JSlider

انظروا الكود :

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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class RulerTest extends JFrame implements SwingConstants, ChangeListener {

	private int min_value = 0;
	private int max_value = 20;
	private int intial_value = 5;
	private JSlider horizontalSlider, verticalSlider;
	private JPanel panel = new JPanel();
	private JPanel horizontalSliderPanel=new JPanel();
	private JPanel verticalSliderPanel=new JPanel();
	private JTextPane pane = new JTextPane();

	public RulerTest() {
		makeHorizontalSlider();
		makeverticalSlider();
		pane.setPreferredSize(new Dimension(600,800));
		panel.setBackground(Color.BLUE);
		panel.add(pane,BorderLayout.CENTER);

		horizontalSliderPanel.add(horizontalSlider);
		panel.add(horizontalSliderPanel,BorderLayout.NORTH);

		verticalSliderPanel.add(verticalSlider);
		panel.add(verticalSliderPanel,BorderLayout.WEST);

		getContentPane().add(panel);
	}

	public static void main(String[] args) {
		RulerTest rt = new RulerTest();
		rt.setDefaultCloseOperation(RulerTest.EXIT_ON_CLOSE);
		rt.setSize(new Dimension(600, 300));
		rt.setVisible(true);
		rt.setLocationRelativeTo(null);
	}

	private void makeHorizontalSlider() {
		horizontalSlider = new JSlider(HORIZONTAL, min_value, max_value, intial_value);
		horizontalSlider.setMajorTickSpacing(5);
		horizontalSlider.setMinorTickSpacing(1);
		horizontalSlider.setPaintTicks(true);
		horizontalSlider.setPaintLabels(true);
		horizontalSlider.addChangeListener(this);
   //	 getContentPane().add(horizontalSlider, BorderLayout.NORTH);

	}

	private void makeverticalSlider() {
		verticalSlider = new JSlider(VERTICAL, min_value, max_value, intial_value);
		verticalSlider.setMajorTickSpacing(5);
		verticalSlider.setMinorTickSpacing(1);
		verticalSlider.setPaintTicks(true);
		verticalSlider.setPaintLabels(true);
		verticalSlider.addChangeListener(this);
	//	getContentPane().add(verticalSlider, BorderLayout.WEST);

	}

	public void stateChanged(ChangeEvent e) {
	}
}

و تأملوا معى الصورة المخرجة

و العيب انى مش عرفت اجعل السليدار الأفقى فوق ال textPane

ولا عرفت أجعل السليدر الرأسى على غرب ال TextPane

ياريت تساعدونا فى النقطة دى

post-166855-1248999690_thumb.jpg

تم تعديل هذه المشاركة بواسطة mr.beshoy في 31 يوليو 2009 في 03:22

#111

الموضوع ليس بالسهولة التي تتصورها

يحتاج إلى الإطلاع على التوثيق الخاص بالفئة JTextPane

JSlider لن يؤدي الغرض المطلوب تماماً

لأنه لو كان لديك Scroll فإنه يفترض أن تتغير القيم المعروضة على المسطرة يتغير الأسطر

لذا أنت بحاجة إلى بناء المسطرة الخاصة بك

باستخدام JPanel

تحياتي

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

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

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

728x90.png

#112

ليه مش ينفع ال JSlider ???

بناءاً على تحريك المؤشر على السليدر يتم التحكم فى تحريك النص ؟؟

و مش فاهم تقصد نعملها أزاى بال Jpanel

و لو تعرف الطريقة قول ياريت

شكراً

#113

بص على الورد يا بيشوي وهتعرف قصدي ايه

عايزلها شغل جامد جداً

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

/index.php?showtopic=196324

في أقرب فرصة هاخش أشوفك تاني

تحياتي

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

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

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

728x90.png

#114

سلام

-------

فى بعض اللمسات الفنية التى تعلمتها من أحد الأصدقاء و تمت إضافتها ...

أولاً شكل البرنامج بوجه عام كان بيظهر بشكل الجافا العادى يعنى شكل ال Dilogs و الهيئة العامة له ككل و لكن ما تعلمته

هو أنك من الممكن أن تجعل البرناج خاصتك يأخذ شكل نظم التشغيل الذى تعمل عليه سواء windows or linux

و لتطبيق ذلك نستعمل تللك الجزئية ( تم إضافتها فى ال class TextEditor) :

 try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
		}

تم وضعها فى الدالة main()

ننتقل للمسة أخرى جميلة :

لعلكم تذكرون كنت فى الكلاس TextEditor

أفعل ذلك :

		fontClass.applayButton.addActionListener(new ActionListener() {

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

ترون فى هذه الفقرة الكودية :lol: أننا نُنادى على المتغيرات selectedFontName - selectedFontStyle - selectedFontSize

من الكلاس fontClass و تلك الفقرة بحد ذاتها فى الكلاس TextEditor

الذى مكّنّا من مناداة تلك المتغيرات أنها public و من المُفضل تكون كل المتغيرات بداخل الكلاس private و نحن لو عملنا ال 3 متغيرات السابقين private فلا يمكن مُناداتهم

فما العمل يا رفيقى المبرمج ؟؟

نستعمل عملية ال setter & getter

كالآتى :

   public String getSelectedFontName() {
		return selectedFontName;
	}

	public int getSelectedFontSize() {
		return selectedFontSize;
	}

	public int getSelectedFontStyle() {
		return selectedFontStyle;
	}

فالتغير الذى تم على الكلاس fontClass أننا أضفنا هذه الدوال و جعلنا المتغيرات كلها private

و نستطيع فى الكلاس TextEditor نفعل ذذاك :

   area.setFont(new Font(fontClass.getSelectedFontName(), fontClass.getSelectedFontStyle(), fontClass.getSelectedFontSize()));

ملحوظة بسيطة لمن يستعملون ال NetBeans IDE

لعمل ال setter & geeter

نضغط Alt+insert ثم نختار إذا كنا نريد عمل set or get

فستظهر قائمة بها ال fileds التى تريد أن تعمل لها set or get

كمان ملاحظة تانى كنا فى الكلاس TextEditor نفعل ذاك :

		fontClass.applayButton.addActionListener(new ActionListener() {

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

ترون هنا أننا نفعل Action على الButton "applayButton"

و ذلك component فى الكلاس fontClass و تمكنا من مناداته لسبب أنه public و كما عرفنا أنه يجب أن يكون private كالقصة السابقة و لحل هذه القضية فعلنا ذاك :

قمنا بعمل method مختصة بأنها بتعمل Action على ال button

public void addApplyActionListener(ActionListener listener) {
		applayButton.addActionListener(listener);
	}

و نرجع للكلاس TextEditor

و نكتب كالآتى :

fontClass.addApplyActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

area.setFont(new Font(fontClass.getSelectedFontName(), fontClass.getSelectedFontStyle(), fontClass.getSelectedFontSize()));

fontClass.setVisible(false);

}

});

و طبعاً نجعل ال button الى موجود فى الكلاس fontClass private أمال أيه لازمة الدالة الى عملنها :rolleyes:

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

كنت قبل كده لما بنحب نقرا ملف كنا عادى خالص بنفتحه و يظهر على ال textPane

و لو ملف كبير كنا مش نقدر نكمله لاننا مش قادرين ننزل لتحت طب و الحل ايه ؟؟

البركة فى الأخ JScrollPane

  JScrollPane scrollPane = new JScrollPane(areaPanel);

طبعا ال areaPanel محتويةال TextPane الى بنكتب عليها ...

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

كنت سبق و اشتكيت انى مش عارف اظبط وضع المسطرة كما أوضحت فى آخر صورة تم إضافتها ... عموماً بعيداً عن فكرة المسطرة و مشاكلها

عرفت هذه الطريقة ( تجعلك تضع السليدر فى المكان مظبوط سواء رأسى أوأفقى )

JSlider horizontalSlider = new JSlider(JSlider.HORIZONTAL, MIN_VALUE, MAX_VALUE, INITIAL_VALUE);
		horizontalSlider.setMajorTickSpacing(5);
		horizontalSlider.setMinorTickSpacing(1);
		horizontalSlider.setPaintTicks(true);
		horizontalSlider.setPaintLabels(true);
		scrollPane.setColumnHeaderView(horizontalSlider);

الأخت setColumenHeaderView (); ريحت الدنيا

و نفس الكلاسمع السليد الراسى

كنتم فى الكود الأخير ترون عندما تعملون run للبرنامج تظهر الشاشة كما بالحجم المعطى لها :

  fram.setSize(600, 300);

نحن نريد أن : عندما نعمل run شاشة البرنامج تظهر بملئى شاشة ال computer نعمل ايه ؟؟

الحل كالاتى :

  fram.setExtendedState(JFrame.MAXIMIZED_BOTH);

طب نلغى خلاص الsize الى كنا عملناه سابقاً ؟؟ طبعاً لا ليه بقى ؟؟

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

من الآخر ال stander العام للدالة main كالآتى :

	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
		}
		TextEditor fram = new TextEditor();
		fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fram.setSize(600, 300);
		fram.setLocationRelativeTo(null);
		fram.setVisible(true);
		fram.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}

ااااااااااااااااااه تعبتم ....معلش أنا دمى تقيل جداً جداً

عموماً نرجع لمشكلتنا الرئيسية

ال Jslider فيه دالة اسمها getValue()

من خلالها ممكن نعطى Event لكل قيمة

و لا ايش رايكم

عموما أنا منهمك شوية فى عمل خاصية ال Tabel

على الأقل ضامن أننا هنتتعب فى حاجة تطلع بعد كده

اما المسطرة انتم قلقتونى منها و شكراً مستر علاء على اللينك هطلع عليه

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

الصورة الأخيرة من البرنامج :

post-166855-1249105366_thumb.jpg

Text.rar

تم تعديل هذه المشاركة بواسطة mr.beshoy في 1 أغسطس 2009 في 08:52

#115

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

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

نُحاول هذه المرة فى موضوع جذاب و هو عمل خاصية ال Table

قرأت عنه و عن كيفية تصميم الTable

و لكن بعد أن صممت الشكل الذى أريده و حاولت تظبيطه لكنه لا يظهر كما أُريد َ

هذا الكود :

import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSpinner;

public class SpainerTest extends JFrame {

	private JSpinner rowSpinner, colSpinner;
	private Box mainPanel, rowSpinnerPanel, colSpinnerPanel;
	private JLabel rowLabel, columnLabel;

	public SpainerTest() {
		intializeSpinner();
		intializePanel();
		intializeLabel();
		designAview();

		getContentPane().add(mainPanel);
	}

	public static void main(String[] args) {
		SpainerTest spainerTest = new SpainerTest();
		spainerTest.setDefaultCloseOperation(SpainerTest.EXIT_ON_CLOSE);
		spainerTest.setSize(new Dimension(400, 200));
	   // spainerTest.pack();
		spainerTest.setResizable(true);
		spainerTest.setLocationRelativeTo(null);
		spainerTest.setVisible(true);
	}

	private void intializeSpinner() {
		rowSpinner = new JSpinner();
		rowSpinner.setMaximumSize(new Dimension(100, 50));
		colSpinner = new JSpinner();
		colSpinner.setMaximumSize(new Dimension(700, 30));
	}

	private void intializePanel() {
		mainPanel = Box.createVerticalBox();
		rowSpinnerPanel = Box.createHorizontalBox();
		colSpinnerPanel = Box.createHorizontalBox();
	}

	private void intializeLabel() {
		rowLabel = new JLabel("Insert row:");
		columnLabel = new JLabel("Insert column");
	}

	private void designAview() {
		rowSpinnerPanel.add(rowLabel);
		rowSpinnerPanel.add(Box.createHorizontalStrut(5));
		rowSpinnerPanel.add(rowSpinner);
		rowSpinnerPanel.add(Box.createHorizontalGlue());

		colSpinnerPanel.add(columnLabel);
		colSpinnerPanel.add(Box.createHorizontalStrut(5));
		colSpinnerPanel.add(colSpinner);
		colSpinnerPanel.add(Box.createHorizontalGlue());

		mainPanel.add(rowSpinnerPanel);
		mainPanel.add(Box.createVerticalStrut(5));
		mainPanel.add(colSpinnerPanel);
		mainPanel.add(Box.createVerticalGlue());
	}
}

كما ترون من الكود فى الدالة intializeSpinner()

انى أحوال تكبير ال spinner

إلى حد مناسب

و لكن دون جدى

أتمنى نعرف منك الطريقة و سامحونى على تساؤلتى الحلوة الغبية الظريفة :D

سلام

post-166855-1249317942_thumb.jpg

#116

إستعمل setPreferredSize بدل setMaximumSize

#117

اوكى فكرت فى هذا قبل أن تقول و فعلت و لكن دون فائدة : -

//كما فى الكود السابق
public class SpainerTest extends JFrame {

	private JSpinner rowSpinner, colSpinner;
	private Box mainPanel, rowSpinnerPanel, colSpinnerPanel;
	private JLabel rowLabel, columnLabel;
	private JTextField rowField, colField;

	public SpainerTest() {
كما فى الكود السابق	//
	intializeTextField();
		designView();

		getContentPane().add(mainPanel);
	}

	public static void main(String[] args) {
//  كما فى المشاركة الأخيرة  
	  }

	private void intializeSpinner() {
		rowSpinner = new JSpinner();
		rowSpinner.setMaximumSize(new Dimension(100, 50));
		colSpinner = new JSpinner();
		colSpinner.setMaximumSize(new Dimension(700, 30));
	}

	private void intializePanel() {
		mainPanel = Box.createVerticalBox();
		rowSpinnerPanel = Box.createHorizontalBox();
		colSpinnerPanel = Box.createHorizontalBox();
	}

	private void intializeLabel() {
// كما فى المشاركة السابقة 
	}

	private void intializeTextField() {
		rowField = new JTextField(10);
		colField = new JTextField(10);
	}

	private void designView() {
		rowSpinnerPanel.add(rowLabel);
		rowSpinnerPanel.add(Box.createHorizontalStrut(5));
		rowSpinnerPanel.add(rowField);
		rowSpinnerPanel.add(Box.createHorizontalStrut(5));
		rowSpinnerPanel.add(rowSpinner);
		rowSpinnerPanel.add(Box.createHorizontalGlue());

		colSpinnerPanel.add(columnLabel);
		colSpinnerPanel.add(Box.createHorizontalStrut(5));
		colSpinnerPanel.add(colField);
		colSpinnerPanel.add(Box.createHorizontalStrut(5));
		colSpinnerPanel.add(colSpinner);
		colSpinnerPanel.add(Box.createHorizontalGlue());

		mainPanel.add(rowSpinnerPanel);
		mainPanel.add(Box.createVerticalStrut(5));
		mainPanel.add(colSpinnerPanel);
		mainPanel.add(Box.createVerticalGlue());

	}
}

انظر الصورة : رغم استمعال ال setMaximumsize

لم يتم تظبيط المكونات

post-166855-1249323017_thumb.jpg

تم تعديل هذه المشاركة بواسطة mr.beshoy في 3 أغسطس 2009 في 21:12

#118

يبدو أن الأفضل هو استعمالهما معا

prog.png


import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSpinner;

public class SpainerTest extends JFrame {

private JSpinner rowSpinner, colSpinner;
private Box mainPanel, rowSpinnerPanel, colSpinnerPanel;
private JLabel rowLabel, columnLabel;

public SpainerTest() {
intializeSpinner();
intializePanel();
intializeLabel();
designAview();

getContentPane().add(mainPanel);
}

public static void main(String[] args) {
SpainerTest spainerTest = new SpainerTest();
spainerTest.setDefaultCloseOperation(SpainerTest.EXIT_ON_CLOSE);
spainerTest.setSize(new Dimension(400, 200));
// spainerTest.pack();
spainerTest.setResizable(true);
spainerTest.setLocationRelativeTo(null);
spainerTest.setVisible(true);
}

private void intializeSpinner() {
rowSpinner = new JSpinner();
rowSpinner.setPreferredSize(new Dimension(60, 30));
rowSpinner.setMaximumSize(new Dimension(60, 30));
colSpinner = new JSpinner();
colSpinner.setPreferredSize(new Dimension(60, 30));
colSpinner.setMaximumSize(new Dimension(60, 30));
}

private void intializePanel() {
mainPanel = Box.createVerticalBox();
rowSpinnerPanel = Box.createHorizontalBox();
rowSpinnerPanel.setMaximumSize(new Dimension(400, 30));
colSpinnerPanel = Box.createHorizontalBox();
colSpinnerPanel.setMaximumSize(new Dimension(400, 30));
}

private void intializeLabel() {
rowLabel = new JLabel("Insert row:");
columnLabel = new JLabel("Insert column");
}

private void designAview() {
rowSpinnerPanel.add(rowLabel);
rowSpinnerPanel.add(Box.createHorizontalStrut(5));
rowSpinnerPanel.add(rowSpinner);
rowSpinnerPanel.add(Box.createHorizontalGlue());

colSpinnerPanel.add(columnLabel);
colSpinnerPanel.add(Box.createHorizontalStrut(5));
colSpinnerPanel.add(colSpinner);
colSpinnerPanel.add(Box.createHorizontalGlue());

mainPanel.add(rowSpinnerPanel);
mainPanel.add(Box.createVerticalStrut(5));
mainPanel.add(colSpinnerPanel);
mainPanel.add(Box.createVerticalGlue());
}
}
import java.awt.Dimension;

#119

حقاً كلامك صحيح و لكن ما السر فى أنه يجب استعمال الدالتين معاً

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

الكودالخاص بالأنترفيس كامل + إضافات بسيطة على ماسبق

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class SpainerTest extends JFrame {

	private JSpinner rowSpinner, colSpinner;
	private Box mainBox, rowSpinnerBox, colSpinnerBox;
	private JLabel rowLabel, columnLabel;
	private JTextField rowField, colField;
	private TitledBorder titledBorder;

	public SpainerTest() {
		intializeSpinner();
		intializeBox();
		intializeLabel();
		intializeTextField();
		designView();

		getContentPane().add(mainBox);
	}

	public static void main(String[] args) {
		SpainerTest spainerTest = new SpainerTest();
		spainerTest.setDefaultCloseOperation(SpainerTest.EXIT_ON_CLOSE);
		spainerTest.setSize(new Dimension(400, 200));
		spainerTest.setResizable(false);
		spainerTest.setLocationRelativeTo(null);
		//   System.out.println(spainerTest.getSize());
		spainerTest.setVisible(true);
	}

	private void intializeSpinner() {
		rowSpinner = new JSpinner();
		rowSpinner.setPreferredSize(new Dimension(100, 15));
		rowSpinner.setMaximumSize(new Dimension(100, 15));
		colSpinner = new JSpinner();
		colSpinner.setPreferredSize(new Dimension(100, 15));
		colSpinner.setMaximumSize(new Dimension(100, 15));
	}

	private void intializeBox() {
		titledBorder=BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK, 3),"Insert table");
		mainBox = Box.createVerticalBox();
		mainBox.setBorder(titledBorder);
		rowSpinnerBox = Box.createHorizontalBox();
		colSpinnerBox = Box.createHorizontalBox();
	}

	private void intializeLabel() {
		rowLabel = new JLabel("Insert row	   :");
		columnLabel = new JLabel("Insert column :");
	}

	private void intializeTextField() {
		rowField = new JTextField();
		rowField.setPreferredSize(new Dimension(100, 15));
		rowField.setMaximumSize(new Dimension(100, 15));
		colField = new JTextField(10);
		colField.setPreferredSize(new Dimension(100, 15));
		colField.setMaximumSize(new Dimension(100, 15));
	}

	private void designView() {
		rowSpinnerBox.add(rowLabel);
		rowSpinnerBox.add(Box.createHorizontalStrut(5));
		rowSpinnerBox.add(rowField);
		rowSpinnerBox.add(Box.createHorizontalStrut(5));
		rowSpinnerBox.add(rowSpinner);
		//   rowSpinnerPanel.add(Box.createHorizontalGlue());

		colSpinnerBox.add(columnLabel);
		colSpinnerBox.add(Box.createHorizontalStrut(5));
		colSpinnerBox.add(colField);
		colSpinnerBox.add(Box.createHorizontalStrut(5));
		colSpinnerBox.add(colSpinner);
		//  colSpinnerPanel.add(Box.createHorizontalGlue());

		mainBox.add(rowSpinnerBox);
		mainBox.add(Box.createVerticalStrut(5));
		mainBox.add(colSpinnerBox);
		mainBox.add(Box.createVerticalGlue());

	}
}

post-166855-1249341166_thumb.jpg

#120

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

اقتباس
و لكن ما السر فى أنه يجب استعمال الدالتين معاً

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

هنا بقى وصلنا لموضوع عميق الا و هو عمل ال table

الفكرة المتبعة : أنك من خلال ال JSpainner تحدد عدد الصفوف و الأعمدة

و من خلالها يُرسم الجدول على ال TextPane

الشفيرة المتعلقة بعمل ال Table :

package word_processor;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionListener;
import java.util.Hashtable;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class InsertTable extends JDialog {

	private JSpinner rowSpinner, colSpinner;
	private Box mainBox, rowSpinnerBox, colSpinnerBox;
	private JLabel rowLabel, columnLabel;
	private JTextField rowField, colField;
	private TitledBorder titledBorder;
	private JButton okButton,cancelButton;
	public TableModel myTable;
	private int[] row;
	private int[] col;

	public InsertTable() {
		intializeSpinner();
		intializeBox();
		intializeLabel();
		intializeTextField();
		intializeButton();
		designView();

		row = (int[]) rowSpinner.getValue();
		col = (int[]) colSpinner.getValue();

		myTable = new TableModelTest(row, col);
		JTable table = new JTable(myTable);
		JScrollPane scrollPane = new JScrollPane(table);

		getContentPane().add(mainBox);
		getContentPane().add(scrollPane);
	}

	private void intializeSpinner() {
		rowSpinner = new JSpinner();
		rowSpinner.setPreferredSize(new Dimension(100, 15));
		rowSpinner.setMaximumSize(new Dimension(100, 15));
		colSpinner = new JSpinner();
		colSpinner.setPreferredSize(new Dimension(100, 15));
		colSpinner.setMaximumSize(new Dimension(100, 15));
	}

	private void intializeBox() {
		titledBorder = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK, 3), "Insert table");
		mainBox = Box.createVerticalBox();
		mainBox.setBorder(titledBorder);
		rowSpinnerBox = Box.createHorizontalBox();
		colSpinnerBox = Box.createHorizontalBox();
	}

	private void intializeLabel() {
		rowLabel = new JLabel("Insert row	   :");
		columnLabel = new JLabel("Insert column :");
	}

	private void intializeTextField() {
		rowField = new JTextField();
		rowField.setPreferredSize(new Dimension(100, 15));
		rowField.setMaximumSize(new Dimension(100, 15));
		colField = new JTextField(10);
		colField.setPreferredSize(new Dimension(100, 15));
		colField.setMaximumSize(new Dimension(100, 15));
	}

	public void intializeButton(){
		okButton=new JButton("ok");
		cancelButton=new JButton("cancel");
	}
	public void okButtonAddActionListener(ActionListener listener){
		okButton.addActionListener(listener);
	}

	private void designView() {
		rowSpinnerBox.add(rowLabel);
		rowSpinnerBox.add(Box.createHorizontalStrut(5));
		rowSpinnerBox.add(rowField);
		rowSpinnerBox.add(Box.createHorizontalStrut(5));
		rowSpinnerBox.add(rowSpinner);
		//   rowSpinnerPanel.add(Box.createHorizontalGlue());

		colSpinnerBox.add(columnLabel);
		colSpinnerBox.add(Box.createHorizontalStrut(5));
		colSpinnerBox.add(colField);
		colSpinnerBox.add(Box.createHorizontalStrut(5));
		colSpinnerBox.add(colSpinner);
		//  colSpinnerPanel.add(Box.createHorizontalGlue());

		mainBox.add(rowSpinnerBox);
		mainBox.add(Box.createVerticalStrut(5));
		mainBox.add(colSpinnerBox);
		mainBox.add(Box.createVerticalGlue());

	}

	class TableModelTest extends AbstractTableModel {

		public Hashtable lookUp;
		public int rows;
		public int columns;
		public int[] columnNames;

		public TableModelTest(int[] rows, int[] colNames) {
			this.rows = rows.length;
			this.columns = colNames.length;
			lookUp = new Hashtable();
			// this.columnNames = new int[columns];
			//  System.arraycopy(colNames, 0, this.columnNames, 0, columns);
		}

		public int getRowCount() {
			return rows;
		}

		public int getColumnCount() {
			return columns;
		}

		public Object getValueAt(int rowIndex, int columnIndex) {
			return lookUp.get(new Point(rowIndex, columnIndex));
		}
	}
}

المشكلة بقى فى الجزئية القادمة ....

أتينا فى الكلاس الأساسى TextEditor

و فعلنا هذه الدالة المختصة بعرض ال Jdilog المسئول عن ال Table

و من ثم يعرض ال table على ال TextPane

 private void insertTable(ActionEvent e) {
		InsertTable insertTable = new InsertTable();
		insertTable.setSize(new Dimension(500, 250));
		insertTable.setVisible(true);
		insertTable.setLocationRelativeTo(null);
		insertTable.setResizable(false);
		insertTable.okButtonAddActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
			  area.setText(new InsertTable().myTable);
			}
		});
	}

طبعاً أنا هنا بحاول اظهر ال table على ال TextPane

بهيك الطريقة

   area.setText(new InsertTable().myTable);

لكنها خاطئة كما ترون

و لكن هذا ما توصلت له

أريد أن ارى أفكاركم الصحيحة

شكرا

#121

الشيفرة كاملة يا عاطف باشا

تحياتي

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

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

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

728x90.png

#122

اتفضل الشفيرة ياعم :

ياريت تساعدنى فى المشكلة دى

أنا بتخانق معها من امبارح

Text.rar

#123

السلام عليكم

لا أعرف إن كانت فكرة إضافة JTable فكرة سديدة

على كل قد قمت بضبط الشيفرة حتى تتم الإضافة

لكني أظن أنك لن تستفيد أي شيء منها

تحياتي

word_processor.rar

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

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

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

728x90.png

#124

سلام

أولا ً شكراً لتعبك...

ثانيا ً عرفت شئ خطير لكى ما نستطيع نعمل ال JTable

علينا أن لا نلجأً لل TextPane و لكن نستعمل ال JEditorPane

و ممكن نستعمل ال JTextPane لكن ليها منطق خاص

هحاول معها اليوم و ساوافيكم النتائج

و على فكرة لم أرى كودك بعد مستر علاء لكن هشوفه اليوم أيضاً شكراً كثيراً لتعبك

سلام

#125

بالمناسبة و أنا شغال كده تذكرت ما قولته :

اقتباس
لا أعرف إن كانت فكرة إضافة JTable فكرة سديدة

على كل قد قمت بضبط الشيفرة حتى تتم الإضافة

لكني أظن أنك لن تستفيد أي شيء منها

لماذا تقول انها غير سديدة ؟؟؟ كيف نضيف ال table بطريقة غير التى افكر بها حسب وجهة نظرك ؟؟

سلام

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

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

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

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

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