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

Simple Text Editor

مغلق
بدأه راكان الحنيطي في 20 يونيو 2006 · 10 رد · 823 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لقد قمت ببرمجة text editor بسيط جدا لكن احتاج بعض المساعدة

لاحظت انه اذا حطيت

JTextArea editor = new JTextArea();

editor.addActionListener(new ...());

يعطيني خطأ انه ما في action listener في هذا الاوبجكت فاستغربت لانه في ال text editor لازم اعرف متى تعدل النص الي جواه عشان اغراض save, save as

و الشغلة الثانية ما عرفت كيف اغلق البرنامج لما يضغط close

و شكرا

/**
* @author: Rakan Alhneiti
* @version: 1.0
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TextEditor extends JFrame
{
	private JMenuBar menu;
	private JMenu FileMenu;
	private JTextArea editor;
	private String Filename;
	private boolean isSaved;

	public JMenuItem fileNew,fileOpen,fileSave,fileSaveAs, fileClose;

	public TextEditor()
	{
		//initialize JFrame
		super("Simple Text Editor");
		Container c = getContentPane();
		c.setLayout(new BorderLayout());
		editor = new JTextArea("",1,1);
		c.add(editor,BorderLayout.CENTER);
		c.add(new JScrollPane(editor));
		//initialize Menu
		initMenu();
		addMenuItemsActionListener();

		Filename = new String("");
		isSaved = true;

		//Initialize form
		setSize(400,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
	private void initMenu()
	{
		//Add file menu and menu items
		FileMenu = new JMenu("File");
		fileNew = new JMenuItem("New...");
		fileOpen = new JMenuItem("Open...");
		fileSave = new JMenuItem("Save...");
		fileSaveAs = new JMenuItem("Save as...");
		fileClose = new JMenuItem("Close");
		FileMenu.add(fileNew);
		FileMenu.add(fileOpen);
		FileMenu.add(fileSave);
		FileMenu.add(fileSaveAs);
		FileMenu.addSeparator();
		FileMenu.add(fileClose);

		//add menus to menu bar
		menu = new JMenuBar();
		menu.add(FileMenu);
		this.setJMenuBar(menu);
	}

	private void addMenuItemsActionListener()
	{
		Handler MenuHandler = new Handler();
		MenuHandler.setObj(this);

		fileNew.addActionListener(MenuHandler);
		fileOpen.addActionListener(MenuHandler);
		fileSave.addActionListener(MenuHandler);
		fileSaveAs.addActionListener(MenuHandler);
		fileClose.addActionListener(MenuHandler);

	}
	public String getFilename()
	{
		return Filename;
	}
	public void createNewFile()
	{
		if(isSaved)
		{
			editor.setText("");
			Filename = new String("");
		}
		else
		{
			int result = JOptionPane.showOptionDialog(this,"File not saved! Would you like to save now?","Save",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,null,null);
			if(result == JOptionPane.YES_OPTION)
			{
				saveFile(Filename);
			}
			else if(result == JOptionPane.NO_OPTION)
			{
				editor.setText("");
				Filename = new String("");
				isSaved = true;
			}
		}
	}
	public void openFile()
	{
		if(isSaved)
		{
			JFileChooser chooser = new JFileChooser();
			int result = chooser.showOpenDialog(this);
			if(result != JFileChooser.CANCEL_OPTION)
			{
				//Open file
				try
				{
					File file = chooser.getSelectedFile();
					FileReader fin = new FileReader(file);
					int c;
					String fileInput = new String("");
					while((c = fin.read())!=-1)
					{
						fileInput = fileInput + String.format("%c",(char)c);
					}
					editor.setText(fileInput);
				}
				catch(IOException e)
				{
					JOptionPane.showMessageDialog(this,e.getMessage());
				}
				catch(Exception e)
				{
					JOptionPane.showMessageDialog(this,e.getMessage());
				}
			}
		}
		else
		{
			int result = JOptionPane.showOptionDialog(this,"File not saved! Would you like to save now?","Save",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,null,null);
			if(result == JOptionPane.YES_OPTION)
			{
				saveFile(Filename);
			}
			else if(result == JOptionPane.NO_OPTION)
			{
				isSaved = true;
				openFile();
			}
		}
	}
	public void saveFile(String fn)
	{
		if(fn.equals(""))
		{
			JFileChooser chooser = new JFileChooser();
			int result = chooser.showSaveDialog(this);
			if(result != JFileChooser.CANCEL_OPTION)
			{
				try
				{
					File file = chooser.getSelectedFile();
					Filename = new String(file.toURL().toString());
				}
				catch(IOException e)
				{
				}
			}
			else
			{
				Filename = new String("");
			}
		}

		if(!Filename.equals(""))
		{
			try
			{
				File f = new File(Filename.substring(6,Filename.length()));
				FileWriter fout = new FileWriter(f);
				fout.write(editor.getText());
				fout.close();
			}
			catch(IOException e)
			{
				JOptionPane.showMessageDialog(this,e.getMessage());
			}
		}
	}
	public void saveNewFile()
	{
		saveFile("");
	}
	public void close()
	{
		//System.exit(0);
	}
	public static void main(String args[])
	{
		new TextEditor();
	}
}

class Handler implements ActionListener
{
	TextEditor te;
	public void setObj(TextEditor t)
	{
		te = t;
	}

	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==te.fileNew)
		{
			te.createNewFile();
		}
		else if(e.getSource()==te.fileOpen)
		{
			te.openFile();
		}
		else if(e.getSource()==te.fileSave)
		{
			te.saveFile(te.getFilename());
		}
		else if(e.getSource()==te.fileSaveAs)
		{
			te.saveNewFile();
		}
		else if(e.getSource()==te.fileClose)
		{
			te.close();
		}
	}
}

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#2

مثلا تضع JTextArea في panel ممكن لكن jTextarea.addactionlistener ما رح تزبط لان jtextarea لازم توضع في شئ object وهذا الابجكت تضيفله حدث ما

window closing

addWindowListener( new WindowAdapter() {
	  public void windowClosing ( WindowEvent e ) {
		System.exit(0);
	  }
	});

لست متواجد بشكل يومي

#3

JTextArea لا يوجد لها ActionListener لان هذا ال Listener متخصص بعملية الادخال و لايكون الادخال في JTextArea

اما اذا اردت حدث اذا تم كتابة شيئ جديد في الـ JTextArea فاعتقد ان

KeyListener تفي بالغرض و بالاخص الميثود

KeyPressed او KeyTyped

بالنسبة للـ window closing هنالك طريقة اخرى وهي:

JFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

بالتوفيق

تم تعديل هذه المشاركة بواسطة ابو الفؤاد في 20 يونيو 2006 في 13:30

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

#4

السلام عليكم

شكرا لردودكم.

اذا لاحظتم لقد قمت بوضع

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

في ال Constructor لكن هناك MenuItem في ال fileMenu اسمه fileClose و وظيفته انه يسكر البرنامج كاملا فما هو ال function الذي يتم استدعائه ليتم اغلاق البرنامج كاملا؟

اما بالنسبة لل KeyPressed فاظن ان هذا هو الحل لعملية اكتشاف اي تعديل على النص بحيث يتم تغيير isSaved الى false

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

الكود بعد التعديل:

/**
* @author: Rakan Alhneiti
* @version: 1.0
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TextEditor extends JFrame implements KeyListener
{
	private JMenuBar menu;
	private JMenu FileMenu;
	private JTextArea editor;
	private String Filename;
	private boolean isSaved;
	private String Text;

	public JMenuItem fileNew,fileOpen,fileSave,fileSaveAs, fileClose;

	public TextEditor()
	{
		//initialize JFrame
		super("Simple Text Editor");
		Container c = getContentPane();
		c.setLayout(new BorderLayout());
		editor = new JTextArea("",1,1);
		c.add(editor,BorderLayout.CENTER);
		c.add(new JScrollPane(editor));

		//initialize Menu
		initMenu();
		addMenuItemsActionListener();

		editor.addKeyListener(this);
		Filename = new String("");
		isSaved = true;
		Text = new String("");

		//Initialize form
		setSize(400,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
	private void initMenu()
	{
		//Add file menu and menu items
		FileMenu = new JMenu("File");
		fileNew = new JMenuItem("New...");
		fileOpen = new JMenuItem("Open...");
		fileSave = new JMenuItem("Save...");
		fileSaveAs = new JMenuItem("Save as...");
		fileClose = new JMenuItem("Close");
		FileMenu.add(fileNew);
		FileMenu.add(fileOpen);
		FileMenu.add(fileSave);
		FileMenu.add(fileSaveAs);
		FileMenu.addSeparator();
		FileMenu.add(fileClose);

		//add menus to menu bar
		menu = new JMenuBar();
		menu.add(FileMenu);
		this.setJMenuBar(menu);
	}

	private void addMenuItemsActionListener()
	{
		Handler MenuHandler = new Handler();
		MenuHandler.setObj(this);

		fileNew.addActionListener(MenuHandler);
		fileOpen.addActionListener(MenuHandler);
		fileSave.addActionListener(MenuHandler);
		fileSaveAs.addActionListener(MenuHandler);
		fileClose.addActionListener(MenuHandler);

	}
	public String getFilename()
	{
		return Filename;
	}
	public void createNewFile()
	{
		if(isSaved)
		{
			editor.setText("");
			Filename = new String("");
		}
		else
		{
			int result = JOptionPane.showOptionDialog(this,"File not saved! Would you like to save now?","Save",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,null,null);
			if(result == JOptionPane.YES_OPTION)
			{
				saveFile(Filename);
			}
			else if(result == JOptionPane.NO_OPTION)
			{
				editor.setText("");
				Filename = new String("");
				isSaved = true;
			}
		}
	}
	public void openFile()
	{
		if(isSaved)
		{
			JFileChooser chooser = new JFileChooser();
			int result = chooser.showOpenDialog(this);
			if(result != JFileChooser.CANCEL_OPTION)
			{
				//Open file
				try
				{
					File file = chooser.getSelectedFile();
					Filename = file.toURL().toString().substring(6,file.toURL().toString().length());
					FileReader fin = new FileReader(file);
					int c;
					String fileInput = new String("");
					while((c = fin.read())!=-1)
					{
						fileInput = fileInput + String.format("%c",(char)c);
					}
					editor.setText(fileInput);
				}
				catch(IOException e)
				{
					JOptionPane.showMessageDialog(this,e.getMessage());
				}
				catch(Exception e)
				{
					JOptionPane.showMessageDialog(this,e.getMessage());
				}
			}
		}
		else
		{
			int result = JOptionPane.showOptionDialog(this,"File not saved! Would you like to save now?","Save",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,null,null);
			if(result == JOptionPane.YES_OPTION)
			{
				saveFile(Filename);
				openFile();
			}
			else if(result == JOptionPane.NO_OPTION)
			{
				isSaved = true;
				openFile();
			}
		}
	}
	public void saveFile(String fn)
	{
		if(fn.equals(""))
		{
			JFileChooser chooser = new JFileChooser();
			int result = chooser.showSaveDialog(this);
			if(result != JFileChooser.CANCEL_OPTION)
			{
				try
				{
					File file = chooser.getSelectedFile();
					Filename = new String(file.toURL().toString());
				}
				catch(IOException e)
				{
				}
			}
			else
			{
				Filename = new String("");
			}
		}

		if(!Filename.equals(""))
		{
			try
			{
				File f = new File(Filename.substring(6,Filename.length()));
				FileWriter fout = new FileWriter(f);
				fout.write(editor.getText());
				fout.close();
				Text = new String(editor.getText());
				isSaved = true;

			}
			catch(IOException e)
			{
				JOptionPane.showMessageDialog(this,e.getMessage());
			}
		}
	}
	public void saveNewFile()
	{
		saveFile("");
	}
	public void close()
	{
		System.exit(0);
	}
	public static void main(String args[])
	{
		new TextEditor();
	}

	public void keyTyped(KeyEvent e)
	{
	}
	public void keyPressed(KeyEvent e)
	{
	}
	public void keyReleased(KeyEvent e)
	{
		if(!Text.equals(editor.getText()))
		{
			isSaved = false;
		}
		else
		{
			isSaved = true;
		}
	}
}

class Handler implements ActionListener
{
	TextEditor te;
	public void setObj(TextEditor t)
	{
		te = t;
	}

	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==te.fileNew)
		{
			te.createNewFile();
		}
		else if(e.getSource()==te.fileOpen)
		{
			te.openFile();
		}
		else if(e.getSource()==te.fileSave)
		{
			te.saveFile(te.getFilename());
		}
		else if(e.getSource()==te.fileSaveAs)
		{
			te.saveNewFile();
		}
		else if(e.getSource()==te.fileClose)
		{
			te.close();
		}
	}
}

ترقبوا الاصدارة الثانية مع الكثير من التعديلات :)

تم تعديل هذه المشاركة بواسطة Maverick في 20 يونيو 2006 في 16:08

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#5
اقتباس
هناك MenuItem في ال fileMenu اسمه fileClose و وظيفته انه يسكر البرنامج كاملا فما هو ال function الذي يتم استدعائه ليتم اغلاق البرنامج كاملا؟

هي التي ذكرها الاخ مجدي

System.exit(0);

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

#6

يمكنك أخي أن تستفيد من الموضوع التالي

كمحرر بسيط

فنحن الآن نقوم بتشطيب المحرر البسيط

وسنبدأ في محرر HTML قريباً

/index.ph...15entry504179

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

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

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

728x90.png

#7

سأقوم بالتطوير على البرنامج بحيث استخدم ال Highlighter لعملية تلوين الخط و بعض التعديلات الاخرى مثل اختيار اللون و اسم الفونت

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#8

أظن أنه يجب عليك

أن تتحول إلى JTextPane

لتحصل على تغييرات الخط والألوان

وشكراً

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

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

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

728x90.png

#9

السلام عليكم

شكرا اخ علاء ضياء لكن انا الي اعرفه انه ال Text Highlighter يشتغل على الادوات الي تعمل inheritence من JTextComponent سواء كانت JTextField,JTextArea, JTextPane

و شكرا

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#10

هذا صحيح أخي الكريم

لكن التعدد في الألوان أو الأنساق في نفس النص

غير مدعوم من الـ JTextArea

لذا وجب عليه تنبيهك

لكي لا تضيع الكثير من الوقت وأنتا تحاول دون فائدة

أرجو أن أكون قد أفدتك

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

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

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

728x90.png

#11

شكرا لك اخ علاء على التوضيح

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

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

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