บทความนี้จะอธิบายวิธีการใช้งาน Java โดยใช้คลิปบอร์ดเพื่อแลกเปลี่ยนข้อมูลระหว่างโปรแกรม ในระบบกราฟิก คลิปบอร์ดของระบบมีความสำคัญมาก เป็นการยากที่จะจินตนาการว่าระบบปฏิบัติการแบบกราฟิกที่ไม่มีฟังก์ชันคลิปบอร์ดจะถูกนำมาใช้อย่างไร ตัวอย่างนี้ตระหนักถึงการแลกเปลี่ยนข้อมูลระหว่างโปรแกรม Java และคลิปบอร์ดของระบบ เมื่อคลิกปุ่ม "วาง" โปรแกรม Java จะรับข้อมูลจากคลิปบอร์ดของระบบและแสดงในองค์ประกอบ JTextArea เมื่อปุ่ม "คัดลอก" ถูกคลิก หลังจากนั้นข้อความที่เลือกในพื้นที่ข้อความจะถูกโอนไปยังคลิปบอร์ดของระบบ
ขั้นแรก คุณต้องได้รับการอ้างอิงอินสแตนซ์ไปยังคลิปบอร์ดของระบบ คลาส java.awt.Toolkit จัดเตรียมเมธอด getSystemClipboard() เพื่อส่งคืนอินสแตนซ์ของคลิปบอร์ด และเนื่องจากคลาส Toolkit จัดเตรียมเมธอดคงที่ getDefaultToolkit() เพื่อส่งคืนอินสแตนซ์ Toolkit ไม่จำเป็นต้องสร้างออบเจ็กต์ Toolkit ใหม่ โค้ดการใช้งานเฉพาะมีดังนี้:
คลิปบอร์ด cb = Toolkit.getDefaultToolkit().getSystemClipboard();
ที่นี่คลาสคลิปบอร์ดจัดเตรียมเมธอด getContents() และ setContents() เพื่อใช้การแลกเปลี่ยนข้อมูล
getContents ที่โอนได้ (ผู้ร้องขอวัตถุ); setContents เป็นโมฆะ (เนื้อหาที่โอนได้, เจ้าของคลิปบอร์ดเจ้าของ);
เมธอด getContents() ที่นี่ได้รับอ็อบเจ็กต์ที่สามารถถ่ายโอนได้จากคลิปบอร์ดของระบบ โดยทั่วไปแล้ว นี่ก็เพียงพอแล้ว โดยระบุว่าคำขอข้อมูลเป็นอ็อบเจ็กต์อินสแตนซ์ของคลาสนี้ หากข้อมูลที่ต้องการเป็นข้อความ คุณสามารถเรียก getTransferData(DataFlavor.stringFlavor) ของอ็อบเจ็กต์ที่โอนได้เพื่อรับโค้ดการใช้งานเป็นดังนี้:
ถ่ายโอนได้ tr = cb.getContents(this);String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
เมธอด setContents() ถ่ายโอนข้อมูลจากโปรแกรมไปยังคลิปบอร์ดของระบบ เนื้อหาพารามิเตอร์แสดงถึงข้อมูล และเจ้าของพารามิเตอร์แสดงถึงเจ้าของคลิปบอร์ด
StringSelection ss = ใหม่ StringSelection(this.jTextArea1.getText());cb.setContents(ss,ss);
คลาส StringSelection ในคำสั่งข้างต้นแสดงถึงข้อความที่เลือก
จากการวิเคราะห์ข้างต้น ที่จริงแล้ว คลิปบอร์ดของระบบจะจัดเก็บคอลเลกชันของอ็อบเจ็กต์ที่ถ่ายโอนได้ และการแลกเปลี่ยนข้อมูลระหว่างโปรแกรมและคลิปบอร์ดของระบบคือการถ่ายโอนของอ็อบเจ็กต์ที่ถ่ายโอนได้ รหัสโปรแกรม:
1. สร้าง Project ใหม่และตั้งชื่อเป็น JClipDemo
2. สร้าง Application ใหม่และตั้งชื่อเป็น JClipDemo ตั้งชื่อหน้าต่างหลัก MainFrame และตั้งชื่อเป็น JClipDemo
3. เพิ่มคอมโพเนนต์ JTextArea, JButtons สองตัว และคอมโพเนนต์ JPanel ลงในหน้าต่างการออกแบบของคลาส MainFrame และวางคอมโพเนนต์ JButton ทั้งสองไว้บนคอมโพเนนต์ JPanel เพิ่มคุณสมบัติใหม่คลิปบอร์ด cb รหัสเฉพาะมีดังนี้:
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();//คลิปบอร์ด instanceClipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();……}
4. เขียนวิธีการเริ่มต้น jbInit() ของคลาส MainFrame ตั้งค่าคุณสมบัติเริ่มต้นของแต่ละส่วนประกอบให้เสร็จสมบูรณ์ และเพิ่มตัวฟังเหตุการณ์สำหรับส่วนประกอบปุ่ม รหัสเฉพาะมีดังนี้:
โมฆะส่วนตัว jbInit() พ่นข้อยกเว้น {//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Your Icon]")));contentPane = (JPanel) this.getContentPane();contentPane.setLayout (borderLayout1);this.setSize(มิติใหม่(396, 203));this.setTitle("JClipboardDemo");jButton1.setFont(new java.awt.Font("Dialog", 0, 14));jButton1.setText("Copy");jButton1.addActionListener(java.ใหม่ awt.event.ActionListener () { // เพิ่มเหตุการณ์ Listener โมฆะสาธารณะ actionPerformed (ActionEvent จ) {jButton1_actionPerformed(e);}});jButton2.setFont(new java.awt.Font("Dialog", 0, 14));jButton2.setText("Paste");jButton2.addActionListener(java.awt ใหม่ .event.ActionListener() {//เพิ่มเหตุการณ์ Listener โมฆะสาธารณะ 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. เขียนวิธีการจัดการเหตุการณ์ของปุ่ม "คัดลอก" เพื่อส่งข้อมูลไปยังคลิปบอร์ดของระบบ
ถือเป็นโมฆะ jButton1_actionPerformed (ActionEvent e) {StringSelection ss = new StringSelection (this.jTextArea1.getText ()); // ส่งข้อความที่เลือกไปยังคลิปบอร์ดของระบบ cb.setContents (ss, ss);}
6. เขียนวิธีจัดการเหตุการณ์ของปุ่ม "วาง" เพื่อรับข้อมูลจากคลิปบอร์ดของระบบ
เป็นโมฆะ jButton2_actionPerformed (ActionEvent e) {try {Transferable tr = cb.getContents (this); // รับวัตถุที่ถ่ายโอนได้จากคลิปบอร์ดของระบบถ้า (tr != null) {String s = (String) tr.getTransferData (DataFlavor.stringFlavor ); // รับข้อมูลข้อความจากวัตถุที่ถ่ายโอนได้ถ้า (s!=null)this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //ใส่ข้อความที่ตำแหน่งเคอร์เซอร์ในองค์ประกอบ JTextArea}}catch(Exception err){err.printStackTrace();} }