السلام عليكم ورحمة الله وبركاته[/center]
أنا محتاجة كيف أعمل
undo and redo في menu
يعني أعد أخر عملية و الغي أخر عملية
جعله الله ميزان حسناتكم
السلام عليكم ورحمة الله وبركاته[/center]
أنا محتاجة كيف أعمل
undo and redo في menu
يعني أعد أخر عملية و الغي أخر عملية
جعله الله ميزان حسناتكم
الأخ الكريم/الأخت الكريمة
السلام عليكم ورحمة الله وبركاته
مرحباً بكم في منتدى الفريق العربي للبرمجة
نود تنبيهك أن العنوان غير مناسب.
الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.
وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!
قواعد المشاركة
شاكرين لكم حُسن تعاونكم
هذا مثال بسيط يقوم باسترجاع "حالة" البرنامج
الفكرة تقوم على التالي:
الفئة Status تقوم بتخزين معلومات عن "حالة" البرنامج في لحظة معينة
changeOccure ويجب أن تستدعى عند كل تغيير في "حالة" البرنامج، تقوم بتخزين "الحالة الحالية" للبرنامج في قائمة من الحالات وحذف الحالات التي أصبح أقدم من المطلوب
restoreStatus تقوم باستعادة حالة ما
المبدأ بسيط قم بتعديل البرنامج ليتناسب مع "حالتك" :D
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class RedoAndUndo extends JFrame {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("ملف");
JMenu editMenu = new JMenu("تحرير");
JMenuItem exit = new JMenuItem("خروج");
JMenu unredo = new JMenu("تراجع / إعادة");
JLabel allLbl = new JLabel("الكل");
JLabel chosenLbl = new JLabel("المختار");
JButton includeBtn = new JButton("تضمين >");
JButton excludeBtn = new JButton("< استثناء");
JList list1 = new JList();
JList list2 = new JList();
DefaultListModel list1m = new DefaultListModel();
DefaultListModel list2m = new DefaultListModel();
LinkedList<Status> statusList = new LinkedList<Status>();
int index = 0;
public RedoAndUndo() {
setTitle("(Redo / Undo) Java IDEs");
String JavaIDEs[] = {"NetBeans", "eclipse", "JDeveloper", "IntelliJ IDEA", "JBuilder", "JCreator"};
for (String s : JavaIDEs) {
list1m.addElement(s);
}
list1.setModel(list1m);
list2.setModel(list2m);
fileMenu.add(exit);
editMenu.add(unredo);
menuBar.add(fileMenu);
menuBar.add(editMenu);
JPanel jp1 = new JPanel(new GridLayout(1, 2, 2, 2));
JPanel jp2 = new JPanel(new GridLayout(1, 2, 2, 2));
JPanel jp3 = new JPanel(new GridLayout(1, 2, 2, 2));
jp1.add(allLbl);
jp1.add(chosenLbl);
jp2.add(list1);
jp2.add(list2);
jp3.add(includeBtn);
jp3.add(excludeBtn);
includeBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeOccure();
int i = list1.getSelectedIndex();
Object o = list1.getSelectedValue();
if (o != null) {
((DefaultListModel) list2.getModel()).addElement(o);
((DefaultListModel) list1.getModel()).removeElement(o);
}
list1.setSelectedIndex(i);
}
});
excludeBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeOccure();
int i = list2.getSelectedIndex();
Object o = list2.getSelectedValue();
if (o != null) {
((DefaultListModel) list1.getModel()).addElement(o);
((DefaultListModel) list2.getModel()).removeElement(o);
}
list2.setSelectedIndex(i);
}
});
add(jp1, BorderLayout.NORTH);
add(jp2, BorderLayout.CENTER);
add(jp3, BorderLayout.SOUTH);
setJMenuBar(menuBar);
applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void changeOccure() {
Status s = new Status();
s.setList1(list1m.toArray());
s.setList2(list2m.toArray());
s.setIndex(index);
statusList.add(s);
JMenuItem jmi = new JMenuItem(String.valueOf(index++));
jmi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
restoreStatus(Integer.valueOf(e.getActionCommand()));
}
});
unredo.add(jmi);
if (unredo.getItemCount() > 5) {
unredo.remove(0);
}
}
public void restoreStatus(int index) {
for (Status s : statusList) {
if (s.getIndex() == index) {
list1m.removeAllElements();
for (Object o : s.getList1()) {
list1m.addElement(o);
}
list2m.removeAllElements();
for (Object o : s.getList2()) {
list2m.addElement(o);
}
}
}
}
public static void main(String[] args) {
new RedoAndUndo();
}
}وهذا كود فئة "الحالة" :
public class Status {
int index;
Object[] list1;
Object[] list2;
public Status() {
list1 = new Object[5];
list2 = new Object[5];
}
public void setIndex(int stepIndex) {
this.index = stepIndex;
}
public int getIndex() {
return index;
}
public Object[] getList1() {
return list1;
}
public void setList1(Object[] list1) {
this.list1 = list1;
}
public Object[] getList2() {
return list2;
}
public void setList2(Object[] list2) {
this.list2 = list2;
}
}سلام
JustPassing كتب:أين تريدين عمل undo/redo، هل في textfield أو textarea؟؟
باااااااااااااااااااااااااااارك الله فيك أخي JustPassing
أريدها في Panel الدي به أشكال
باااااااااااااااااااااااااااارك الله فيك أخي Speed_Of_Light
سأجرب
:) :) :)
تم تعديل هذه المشاركة بواسطة تميز2009 في 13 أبريل 2010 في 17:07
بالإمكان إستخدام إحدى الـ Design Patterns
لمعلومات أكثر عن الـ Design Patterns يمكن الرجوع لكتاب Design Patterns
السلام عليكم ورحمة الله وبركاته
لم أفهم كيف اعمل بالنسبة JPanel
الدي يحتوي رسم ويمكن تغييره حسب حركة mouse
أنا محتاجة اجاباتكم
:excl: :excl: :excl: