توضح هذه المقالة طريقة تنفيذ Java باستخدام الحافظة لتبادل البيانات بين البرامج. في الأنظمة الرسومية، تعد حافظة النظام مهمة جدًا، ومن الصعب تخيل كيفية استخدام نظام تشغيل رسومي بدون وظيفة الحافظة. يدرك هذا المثال تبادل البيانات بين برنامج Java وحافظة النظام. عند النقر فوق الزر "لصق"، يحصل برنامج Java على البيانات من حافظة النظام ويعرضها في مكون JTextArea عند الضغط على الزر "نسخ". يتم النقر فوقه بعد ذلك، سيتم نقل النص المحدد في منطقة النص إلى حافظة النظام.
أولاً، يجب أن تحصل على مرجع مثيل لحافظة النظام. توفر فئة java.awt.Toolkit طريقة getSystemClipboard() لإرجاع مثيل Clipboard؛ وبما أن فئة Toolkit توفر الطريقة الثابتة getDefaultToolkit() لإرجاع مثيل مجموعة أدوات، ليست هناك حاجة لإنشاء كائن مجموعة أدوات جديد، رمز التنفيذ المحدد هو كما يلي:
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
هنا، توفر فئة الحافظة أساليب getContents() وsetContents() لتنفيذ تبادل البيانات.
getContents القابلة للتحويل (طالب الكائن)؛ Void setContents (محتويات قابلة للتحويل، مالك ClipboardOwner)؛
تحصل طريقة getContents() هنا على كائن قابل للتحويل من حافظة النظام. يمثل طالب المعلمة مقدم طلب البيانات. بشكل عام، هذا يكفي للإشارة إلى أن طلب البيانات هو كائن مثيل لهذه الفئة. إذا كانت البيانات المطلوبة نصية، فيمكنك استدعاء getTransferData(DataFlavor.stringFlavor) للكائن القابل للتحويل للحصول عليها، ويكون رمز التنفيذ كما يلي:
للتحويل tr = cb.getContents(this);String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
تقوم طريقة setContents() بنقل البيانات من البرنامج إلى حافظة النظام. تمثل محتويات المعلمة البيانات، ويمثل مالك المعلمة مالك الحافظة.
StringSelection ss = new StringSelection(this.jTextArea1.getText());cb.setContents(ss,ss);
تمثل فئة StringSelection في البيان أعلاه النص المحدد.
من التحليل أعلاه، في الواقع، تقوم حافظة النظام بتخزين مجموعة من الكائنات القابلة للتحويل، وتبادل البيانات بين البرنامج وحافظة النظام هو نقل الكائنات القابلة للتحويل. رمز البرنامج:
1. قم بإنشاء مشروع جديد وقم بتسميته JClipDemo.
2. قم بإنشاء تطبيق جديد وقم بتسميته JClipDemo؛ وقم بتسمية الإطار الرئيسي MainFrame وقم بتسميته JClipDemo.
3. أضف مكون JTextArea واثنين من JButtons ومكون JPanel إلى نافذة التصميم الخاصة بفئة MainFrame، ثم ضع مكوني JButton على مكون JPanel. إضافة خاصية جديدة للحافظة cb. الكود المحدد هو كما يلي:
public class MainFrame يمتد JFrame {private JPanel contentPane;private BorderLayout borderLayout1 = new BorderLayout();// إنشاء مكون جديد Private JTextArea jTextArea1 = new JTextArea();private JPanel jPanel1 = new JPanel();private JButton jButton1 = new JButton( );خاص JButton jButton2 = جديد JButton();//مثيل الحافظةClipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();……}
4. اكتب طريقة التهيئة jbInit () لفئة MainFrame، وأكمل إعدادات الخاصية الأولية لكل مكون، وأضف مستمع الحدث لمكون الزر، الكود المحدد هو كما يلي:
استثناء jbInit () باطل خاص {//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[أيقونتك]")));contentPane = (JPanel) this.getContentPane();contentPane.setLayout (borderLayout1);this.setSize(new Dimension(396, 203));this.setTitle("JClipboardDemo");jButton1.setFont(new java.awt.Font("Dialog", 0, 14));jButton1.setText("Copy");jButton1.addActionListener(new java. awt.event.ActionListener() { // إضافة مستمع الحدث public void actionPerformed(ActionEvent هـ) {jButton1_actionPerformed(e);}});jButton2.setFont(new java.awt.Font("Dialog", 0, 14));jButton2.setText("Paste");jButton2.addActionListener(new java.awt .event.ActionListener() {// إضافة مستمع الحدث public void actionPerformed(ActionEvent e) {jButton2_actionPerformed(e);}});contentPane.add(jTextArea1, BorderLayout.CENTER);contentPane.add(jPanel1, BorderLayout.SOUTH);jPanel1.add(jButton1, null);jPanel1.add(jButton2, null); }
5. اكتب طريقة التعامل مع الحدث من زر "نسخ" لإرسال البيانات إلى حافظة النظام.
void jButton1_actionPerformed(ActionEvent e) {StringSelection ss = new StringSelection(this.jTextArea1.getText()); // أرسل النص المحدد إلى حافظة النظام cb.setContents(ss,ss);}
6. اكتب طريقة معالجة الحدث من خلال زر "لصق" للحصول على البيانات من حافظة النظام.
void jButton2_actionPerformed(ActionEvent e) {try{Transferable tr = cb.getContents(this); // احصل على كائن قابل للتحويل من حافظة النظام if (tr != null){String s = (String) tr.getTransferData(DataFlavor.stringFlavor) ); // احصل على بيانات نصية من كائن قابل للتحويل if (s!=null)this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); // أدخل نصًا في موضع المؤشر في مكون JTextArea}}catch(Exception err){err.printStackTrace();} }