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

كيف نجعل البرنامج يحفظ جميع التغيرات قبل إغلاقه لإستخدامها عند فتحه من جديد

بدأه issam-ahmed في 14 ديسمبر 2012 · 13 رد · 1,127 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخواني الكرام///

أنا قمت بعمل برنامج بسيط لكن حتى يصبح البرنامج جاهز للإستخدام يجب أن يتم حفظ التغيرات

التي تنتج في كل مرة أقوم بها بتشغيل البرنامج يعني مثلاً في عندي Combo Box يكون له قيمة إفتراضية

هالقيت لو أنا شغلت البرنامج و غيرت القيمة ثم سكرت البرنامج و جئت أشغله كمان مرة سوف تظهر القيمة الأصلية

و لن تظهر القيمة الجديدة التي قمت بإضافتها أثناء تشغيل البرنامج كيف يمكن جعله يحفظ القيمة الجديدة و هذا

الكلام أريده يحدث لباقي العناصر مثل label أو text field علماً بأنه الإضافات لن تكون كبيرة فقط تغيير

ال selected Item في ال Combo Box و التي هي موجودة ضمن ال ITEM و ينتج تغيير بسيط لباقي العناصر

كتغيير الخط أو يحدث disable لشيء معين فهل يوجد طريقة أم يجب أن يكون هناك داتابيس و الموضوع

مش مستاهل قواعد بيانات لكن لا أعرف الطريقة و شكراً لكم

أرجو الإفادة و بارك الله فيكم

تم تعديل هذه المشاركة بواسطة issam-ahmed في 14 ديسمبر 2012 في 21:38

#2

السلام عليكم

إذا كنت لا تريد إستخدام قواعد البيانات فيمكنك إستخدام الملفات لحفظ القيم وجلبها .

ستجد في المنتدى كثير من المواضيع التي تتعامل مع الملفات .

وأنصحك بإستخدام تقنية json في التعامل مع الملفات من خلال لغة java , لن تسترق الكثير من الوقت في تعلم إستخدام هذه التقنية لكنها ستوفر عليك الكثير .

وهذا رابط أحد المكتبات وكيفية إستخدامها بالإضافة للمكتبات المذكورة في الرابط أعلاه

http://code.google.com/p/json-simple

دمت في أمان الله

1

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#3

السلام عليكم

قم بإعادة تعريف الدالة windowClosing و قم بتخزين الخصائص التي تُريد استعادتها لاحقا باستخدام الفئة Preferences.

هذا مثال كتبتُه لك ع السريع (المثال يقوم بحفظ آخر ما تمت كتابته داخل الــ JTextField بالإضافة إلى جحم النافذة ووضعيتها أيضا)

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestPreferences extends JFrame {

    Preferences prefs = Preferences.userNodeForPackage(TestPreferences.class);
    private JPanel panel;
    private JTextField tInput = new JTextField();

    public TestPreferences() {
        super("Test");
        setEtatInitial();
        addListeners();
        initComponents();
    }

    private void initComponents() {
        panel = new JPanel();
        tInput.setPreferredSize(new Dimension(230, 20));
        panel.add(tInput);

        panel.setLayout(new FlowLayout(FlowLayout.CENTER));
        getContentPane().add(panel);
    }

    public void setEtatInitial() {
        String title = prefs.get("key", "Default");
        tInput.setText(title);
        int x = prefs.getInt("x", 200);
        int y = prefs.getInt("y", 200);
        setLocation(x, y);
        int w = prefs.getInt("w", 450);
        int h = prefs.getInt("h", 250);
        setSize(w, h);
        int state = prefs.getInt("state", Frame.NORMAL);
        setExtendedState(state);
    }

    public void addListeners() {
        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent we) {
                prefs.putInt("state", getExtendedState());
                setExtendedState(Frame.NORMAL);
                Rectangle bounds = getBounds();
                prefs.putInt("x", (int) bounds.getX());
                prefs.putInt("y", (int) bounds.getY());
                prefs.putInt("w", (int) bounds.getWidth());
                prefs.putInt("h", (int) bounds.getHeight());
                prefs.put("key", tInput.getText());
            }
        });
    }

    public static void main(String[] args) {
        TestPreferences obj = new TestPreferences();
        obj.setVisible(true);
        obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

بالتوفيق.

2
#4

شكراً لكم جميعاً ما إقترحتوه من حلول يحتاج لتحليل و فهم سوف أقوم بدراسة ما وضعتوه

و سأوفيكم بالنتيجة إن شاء الله في الغد شكراً لكم مرة أخرى :)

#5
Sn@CkeR كتب:

السلام عليكم

قم بإعادة تعريف الدالة windowClosing و قم بتخزين الخصائص التي تُريد استعادتها لاحقا باستخدام الفئة Preferences.

هذا مثال كتبتُه لك ع السريع (المثال يقوم بحفظ آخر ما تمت كتابته داخل الــ JTextField بالإضافة إلى جحم النافذة ووضعيتها أيضا)

بالتوفيق.

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

أخي حاولت أعمل بطريقتك لم يظبط معي يوجد أخطاء سوف أرفق لك الملف أنا حاولت أعمل ذالك ل text field و combo box

إذا في إمكانية تشوف الخطاء الموجود إلي في الملف لأنه موجود فيه محاولة على text field حيث ال combo box ما ظبط نهائي

لذالك أتمنى أن تعملي مثال على ال combo box في الملف نفسه و بارك الله فيك.

و بالنسبة لطريقة json كما نصحني الآخ حسيت حالي تائه ما لقيت شرح قريب لموضوعي :( ..

أخيراً في شباب اصدقاء نصحوني بالداتا بيز و قلولي أسهل ؟؟؟!!

و السلام عليكم و بارك الله فيكم.

WeakTable.rar

تم تعديل هذه المشاركة بواسطة issam-ahmed في 15 ديسمبر 2012 في 08:44

#6
ahmedsaoud31 كتب:

السلام عليكم

إذا كنت لا تريد إستخدام قواعد البيانات فيمكنك إستخدام الملفات لحفظ القيم وجلبها .

ستجد في المنتدى كثير من المواضيع التي تتعامل مع الملفات .

وأنصحك بإستخدام تقنية json في التعامل مع الملفات من خلال لغة java , لن تسترق الكثير من الوقت في تعلم إستخدام هذه التقنية لكنها ستوفر عليك الكثير .

وهذا رابط أحد المكتبات وكيفية إستخدامها بالإضافة للمكتبات المذكورة في الرابط أعلاه

http://code.google.com/p/json-simple

دمت في أمان الله

هل تستطيع أخي ان تشرح لنا عن هذه التقنية ولماذا تستخدم بالاساس ويا ليت بعض الامثلة

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#7
Sn@CkeR كتب:

السلام عليكم

قم بإعادة تعريف الدالة windowClosing و قم بتخزين الخصائص التي تُريد استعادتها لاحقا باستخدام الفئة Preferences.

هذا مثال كتبتُه لك ع السريع (المثال يقوم بحفظ آخر ما تمت كتابته داخل الــ JTextField بالإضافة إلى جحم النافذة ووضعيتها أيضا)

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestPreferences extends JFrame {

    Preferences prefs = Preferences.userNodeForPackage(TestPreferences.class);
    private JPanel panel;
    private JTextField tInput = new JTextField();

    public TestPreferences() {
        super("Test");
        setEtatInitial();
        addListeners();
        initComponents();
    }

    private void initComponents() {
        panel = new JPanel();
        tInput.setPreferredSize(new Dimension(230, 20));
        panel.add(tInput);

        panel.setLayout(new FlowLayout(FlowLayout.CENTER));
        getContentPane().add(panel);
    }

    public void setEtatInitial() {
        String title = prefs.get("key", "Default");
        tInput.setText(title);
        int x = prefs.getInt("x", 200);
        int y = prefs.getInt("y", 200);
        setLocation(x, y);
        int w = prefs.getInt("w", 450);
        int h = prefs.getInt("h", 250);
        setSize(w, h);
        int state = prefs.getInt("state", Frame.NORMAL);
        setExtendedState(state);
    }

    public void addListeners() {
        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent we) {
                prefs.putInt("state", getExtendedState());
                setExtendedState(Frame.NORMAL);
                Rectangle bounds = getBounds();
                prefs.putInt("x", (int) bounds.getX());
                prefs.putInt("y", (int) bounds.getY());
                prefs.putInt("w", (int) bounds.getWidth());
                prefs.putInt("h", (int) bounds.getHeight());
                prefs.put("key", tInput.getText());
            }
        });
    }

    public static void main(String[] args) {
        TestPreferences obj = new TestPreferences();
        obj.setVisible(true);
        obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

بالتوفيق.

+1

ماهي مدة حياة الغرض (prefs) الذي يؤخذ من فئة Preferences ؟

1
#8

السلام عليكم أخي أنا عدلت على الكود ضفت combo box لكن بطلعلي خطأ يا ريت تحللي المشكلة و شكراً لك

حسب ما فهمت إنه الخطأ عبارة عن أن القيم التي ترجع هنا

        Object ds = prefs.get("ke", "Default");
        S1.setSelectedItem(ds);

تكون نصية و لكن ال combobox بتعامل مع القيم

كا object لذالك يظهر خطأ هنا

 prefs.put("Ke", S1.getSelectedItem());

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

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package testpreferences;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestPreferences extends JFrame {

    Preferences prefs = Preferences.userNodeForPackage(TestPreferences.class);
    private JPanel panel;
    private JTextField tInput = new JTextField();
    private JComboBox S1 = new JComboBox();

    public TestPreferences() {
        super("Test");
        setEtatInitial();
        addListeners();
        initComponents();
    }

    private void initComponents() {
        panel = new JPanel();
        tInput.setPreferredSize(new Dimension(230, 20));
        panel.add(tInput);
        S1.setPreferredSize(new Dimension(230, 20));
        S1.addItem("issam");
        S1.addItem("issm");
        S1.addItem("ism");
        panel.add(S1);

        panel.setLayout(new FlowLayout(FlowLayout.CENTER));
        getContentPane().add(panel);
    }

    public void setEtatInitial() {
        String title = prefs.get("key", "Default");
        tInput.setText(title);
        Object ds = prefs.get("ke", "Default");
        S1.setSelectedItem(ds);

        int x = prefs.getInt("x", 200);
        int y = prefs.getInt("y", 200);
        setLocation(x, y);
        int w = prefs.getInt("w", 450);
        int h = prefs.getInt("h", 250);
        setSize(w, h);
        int state = prefs.getInt("state", Frame.NORMAL);
        setExtendedState(state);
    }

    public void addListeners() {
        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent we) {
                prefs.putInt("state", getExtendedState());
                setExtendedState(Frame.NORMAL);
                Rectangle bounds = getBounds();
                prefs.putInt("x", (int) bounds.getX());
                prefs.putInt("y", (int) bounds.getY());
                prefs.putInt("w", (int) bounds.getWidth());
                prefs.putInt("h", (int) bounds.getHeight());
                prefs.put("key", tInput.getText());
                prefs.put("Ke", S1.getSelectedItem());


            }
        });
    }

    public static void main(String[] args) {
        TestPreferences obj = new TestPreferences();
        obj.setVisible(true);
        obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
#9

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

اقتباس
هل تستطيع أخي ان تشرح لنا عن هذه التقنية ولماذا تستخدم بالاساس ويا ليت بعض الامثلة
- على الرحب والسعة أخي الكريم , فضلت أن يكون الحديث في موضوع منفصل يمكنك متابعته على الرابط التالي

دمتم في أمان الله

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#10
اقتباس
ماهي مدة حياة الغرض (prefs) الذي يؤخذ من فئة Preferences ؟

يتم حفظ الــ Preferences حتى بعد إعادة تشغيل الكمبيوتر.

بالنسبة لصاحب الموضوع, هل حُلت مشكلتك مع الــ ComboBox أم لا ؟

#11
Sn@CkeR كتب:

يتم حفظ الــ Preferences حتى بعد إعادة تشغيل الكمبيوتر.

بالنسبة لصاحب الموضوع, هل حُلت مشكلتك مع الــ ComboBox أم لا ؟

لا و الله يا أخي و حاولت كثيراً و أنا بعدل ع الكود و مش ظابط و أرفقت إلك الكود يا ريت تطلع عليه و شكراً لك

#12

معظم البرامج تستخدم الــــــــProperties

في خزن بعض الخواص الخاصة بالبرنامج في فايل قرب البرنامج ولا تحتاج الى

مكتبة لانها مضمنة داخل الــــJava JDK

ولك هذا المثال

import java.io.*;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrator
 */
public class PropertiesDemo {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
      Properties capitals = new Properties();


      capitals.put("Missouri", "Jefferson City");
      capitals.put("Washington", "Olympia");
      capitals.put("California", "Sacramento");
      capitals.put("Indiana", "Indianapolis");

    // Get a set-view of the keys.
      Set states = capitals.keySet();

    // Show all of the states and capitals.
      for(Object name : states)
      System.out.println("The capital of " +
      name + " is " +
      capitals.getProperty((String)name)
      + ".");
     System.out.println();
    // Look for state not in list -- specify default.
     String str = capitals.getProperty("Florida", "Not Found");
     System.out.println("The capital of Florida is "
     + str + ".");

     //Store in XML File
     OutputStream os = null;
        try {
//            os = new FileOutputStream("./Setting.xml");
             os = new FileOutputStream("./Setting");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(PropertiesDemo.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            capitals.storeToXML(os, str);
        } catch (IOException ex) {
            Logger.getLogger(PropertiesDemo.class.getName()).log(Level.SEVERE, null, ex);
        }




        //Load From XML FIle
//        InputStream is=new FileInputStream("./Setting.xml");
        InputStream is=new FileInputStream("./Setting");
        Properties properties = new Properties();
        properties.loadFromXML(is);

        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
            Object object = entry.getKey();
            Object object1 = entry.getValue();
             System.out.println();
             System.out.println(object+"  "+object1);

        }



     }

    }

تحياتي

#13
اقتباس
لا و الله يا أخي و حاولت كثيراً و أنا بعدل ع الكود و مش ظابط و أرفقت إلك الكود يا ريت تطلع عليه و شكراً لك

تفضل :

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestPreferences extends JFrame {

    Preferences prefs = Preferences.userNodeForPackage(TestPreferences.class);
    private JPanel panel;
    private JTextField tInput = new JTextField();
    private JComboBox comboBox = new JComboBox();

    public TestPreferences() {
        super("Test");
        initComponents();
        setEtatInitial();
        addListeners();
    }

    private void initComponents() {
        panel = new JPanel();
        tInput.setPreferredSize(new Dimension(230, 20));
        panel.add(tInput);
        comboBox.setPreferredSize(new Dimension(230, 20));
        comboBox.addItem("Snacker");
        comboBox.addItem("Hacker");
        comboBox.addItem("Cracker");
        comboBox.addItem("Attacker");
        panel.add(comboBox);

        panel.setLayout(new FlowLayout(FlowLayout.CENTER));
        getContentPane().add(panel);
    }

    public void setEtatInitial() {
        String title = prefs.get("key", "Default");
        tInput.setText(title);
        int ds = prefs.getInt("combo", 0);
        comboBox.setSelectedIndex(ds);
        int x = prefs.getInt("x", 200);
        int y = prefs.getInt("y", 200);
        setLocation(x, y);
        int w = prefs.getInt("w", 450);
        int h = prefs.getInt("h", 250);
        setSize(w, h);
        int state = prefs.getInt("state", Frame.NORMAL);
        setExtendedState(state);
    }

    public void addListeners() {
        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent we) {
                prefs.putInt("state", getExtendedState());
                setExtendedState(Frame.NORMAL);
                Rectangle bounds = getBounds();
                prefs.putInt("x", (int) bounds.getX());
                prefs.putInt("y", (int) bounds.getY());
                prefs.putInt("w", (int) bounds.getWidth());
                prefs.putInt("h", (int) bounds.getHeight());
                prefs.put("key", tInput.getText());
                prefs.putInt("combo", comboBox.getSelectedIndex());
            }
        });
    }

    public static void main(String[] args) {
        TestPreferences obj = new TestPreferences();
        obj.setVisible(true);
        obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
1
#14
Sn@CkeR كتب:

تفضل :

السلام عليكم

ألف شكر أخي إستخدمت ال index و أنا كنت أحاول أعملها ب selectItem :)

 comboBox.setSelectedIndex(ds);

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

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

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

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

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