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

مساعدة عاجلة لربط Two Classes مع بعض..

بدأه realahmed8 في 22 ديسمبر 2008 · 4 رد · 744 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

احتاج لمساعدة بربط Two Classes مع بعض ، بحيث أستخدم الدوال الموجودة في الكلاس الاولى داخل الكلاس الثانية..

هذا كود الكلاس الأول ما في مشاكل

class TextWithUndo {
	private Entry first, last;
	private boolean startCommand;
	public void newCommand() { startCommand = true; }
	public boolean undoable() { return last!=null; }
	public boolean redoable() { return last!=null && last.next!=null; }
	public void add(Entry e) {
	if(last==null)
		first = e;
	else last.next = e;
	e.prev = last;
	last = e;
	e.startCommand = startCommand;
	startCommand = false;
	e.redo();
	}
	public void undo() {
	boolean done;
	do {
		if(last==null) break;
		last.undo();
		done = last.startCommand;
		last = last.prev;
	} while(!done);
	}
	public void redo() {
	while(last!=null) {
		Entry e = last.next;
		if(e==null) break;
		e.redo();
		last = e;
		e = e.next;
		if(e==null || e.startCommand) break;
	}
	}
	public abstract static class Entry {
	Entry next, prev;
	boolean startCommand;
	abstract void undo();
	abstract void redo();
	}
}

الكلاس الثاني اللي فيه المشكلة..

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

public class UndoOp extends JFrame {

private JTextPane t1;


 public UndoOp() {

  super("Undo Operation");

  t1 = new JTextPane();


  Document doc = t1.getDocument();

  JPanel p1 = new JPanel();
  JPanel p2 = new JPanel();

  JButton b1 = new JButton("Undo");


  p1.setLayout(new GridLayout(1,1));
  p1.add(new JScrollPane(t1)); 
  p2.add(b1);


  this.getContentPane().add(p1, BorderLayout.CENTER);
  this.getContentPane().add(p2, BorderLayout.SOUTH);

   setSize(300, 200);
  show();

  doc.addUndoableEditListener(new UndoableEditListener() {
  public void undoableEditHappened(UndoableEditEvent evt) {
  //undo.addEdit(evt.getEdit());
  }
  });

  b1.addActionListener(new ActionListener() { 

  public void actionPerformed(ActionEvent h) 
  { 
  try {
 {
   undo.TextWithUndo();
  }
  } 
  catch (CannotUndoException e) {
  }
  } 
  }); 

  }

  public static void main( String args[] )
   {
	  UndoOp app = new UndoOp();

	  app.addWindowListener(
		 new WindowAdapter() {
		   }
	  );
   }
}

تم تعديل هذه المشاركة بواسطة realahmed8 في 22 ديسمبر 2008 في 13:47

#2

أين المشكلة؟

فصل

تحياتي

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

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

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

728x90.png

#3

المشكلة/

أنا عندي الكلاس الاولى بتعمل عملية undo لآخر عملية تمت .. يعني لو كتب احمد و ضغطت زر Undo حيحذف آخر حرف اللي هو الدال ، وهاي الكلاس ما فيها مشاكل و لكنها عامة ليست رئيسية ، ارغب في استدعائها في الكلاس الثانية..

الكلاس الثانية فيها ( زر + مربع نص ) .. والمطلوب لما اضغط على الزر يعملي تراجع لآخر حرف انكتب في مربع النص..

#4

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

اخي انت تريد استخدام هذا الميثود :

public void undo() {

boolean done;

do {

if(last==null) break;

last.undo();

done = last.startCommand;

last = last.prev;

} while(!done);

}

الذي هو متواجد في الكلاس TextWithUndo

=========

اولا نوع هذا الميثود هو instance method شرط اساسي لكي تتعامل معها تحتاج الى Object لذالك وجب عليك انشاء كائن ضمن الكلاس الثاني كما تقول ..

عندها ان شاء الله سوف تنحل المشكله ..

يعني على سبيل المثال :

object = new TextWithUndo();

object.undo

سوف يعمل بهذه الطريقة ..

بالتوفيق

سبحان الله , الله اكبر , ولله الحمد

#5

شكرا لك أخي azeez00..

تم الربط ، وكل شيء تمام..

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