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

[تنبيه - عنوان غير مناسب : ]function undo and redo

بدأه تميز2009 في 11 أبريل 2010 · 6 رد · 786 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته[/center]

أنا محتاجة كيف أعمل

undo and redo في menu

يعني أعد أخر عملية و الغي أخر عملية

جعله الله ميزان حسناتكم

أضغط هنا ولن تندم

http://www.shbab1.com/2minutes.htm

أستغفر الله وأتوب اليه

حسبي الله ونعم الوكيل

#2

أين تريدين عمل undo/redo، هل في textfield أو textarea؟؟

#3

الأخ الكريم/الأخت الكريمة

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

نود تنبيهك أن العنوان غير مناسب.

الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

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

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

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

728x90.png

#4

هذا مثال بسيط يقوم باسترجاع "حالة" البرنامج

الفكرة تقوم على التالي:

الفئة 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;
    }
}

سلام

2
#5
JustPassing كتب:

أين تريدين عمل undo/redo، هل في textfield أو textarea؟؟

باااااااااااااااااااااااااااارك الله فيك أخي JustPassing

أريدها في Panel الدي به أشكال

باااااااااااااااااااااااااااارك الله فيك أخي Speed_Of_Light

سأجرب

:) :) :)

تم تعديل هذه المشاركة بواسطة تميز2009 في 13 أبريل 2010 في 17:07

أضغط هنا ولن تندم

http://www.shbab1.com/2minutes.htm

أستغفر الله وأتوب اليه

حسبي الله ونعم الوكيل

#6

بالإمكان إستخدام إحدى الـ Design Patterns

Memento pattern

Command pattern

لمعلومات أكثر عن الـ Design Patterns يمكن الرجوع لكتاب Design Patterns

#7

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

لم أفهم كيف اعمل بالنسبة JPanel

الدي يحتوي رسم ويمكن تغييره حسب حركة mouse

أنا محتاجة اجاباتكم

:excl: :excl: :excl:

أضغط هنا ولن تندم

http://www.shbab1.com/2minutes.htm

أستغفر الله وأتوب اليه

حسبي الله ونعم الوكيل

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