java.awt.datatransfer包提供的類只能夠將程式先剪下或複製到系統剪下板中
今天要做的執行個體是自己實現copy,cut,paste的功能。先
1)複製功能:擷取游標選中的值,然後將值放到系統剪貼簿中
2)剪下功能:擷取游標選中的值,然後將值放到系統剪貼簿中。同時記錄游標的起點和終點位置,清空游標選中的內容
3)黏貼功能:擷取剪貼簿中的內容,並將其賦值給文字框
註:代碼如下。具體注釋標註在代碼中
/**<br /> * 匯入java中的庫檔案<br /> */<br />import java.awt.*;<br />import java.awt.event.*;<br />import java.awt.datatransfer.*;</p><p>/**<br /> * 自訂Win類,繼承自Frame表單,繼承ActionListener介面<br /> * @author chenshanshan<br /> *<br /> */<br />class Win extends Frame implements ActionListener<br />{<br />//菜單工具條<br />MenuBar menubar;<br />//菜單<br />Menu menu;<br />//菜單列表<br />MenuItem copy,cut,paste;<br />//文字框<br />TextArea t1,t2;<br />//剪貼簿<br />Clipboard clb=null;</p><p>/**<br /> * 建構函式<br /> */<br />Win()<br />{<br />//擷取系統剪貼簿<br />clb=getToolkit().getSystemClipboard();</p><p>//設定表單控制項<br />menubar=new MenuBar();<br />menu=new Menu("Edit");<br />copy=new MenuItem("copy");<br />cut=new MenuItem("cut");<br />paste=new MenuItem("paste");<br />t1=new TextArea(10,20);<br />t2=new TextArea(10,20);<br />menubar.add(menu);<br />menu.add(copy);<br />menu.add(cut);<br />menu.add(paste);<br />setMenuBar(menubar);<br />add(t1);<br />add(t2);</p><p>//添加事件監聽<br />copy.addActionListener(this);<br />cut.addActionListener(this);<br />paste.addActionListener(this);</p><p>//設定表單相關屬性<br />setLayout(new FlowLayout());<br />setBounds(100,100,400,350);<br />//表單可見<br />setVisible(true);<br />//添加組件的有效驗證<br />validate();</p><p>//添加表單關閉事件的監聽<br />addWindowListener(new WindowAdapter()<br />{<br />public void windowClosing(WindowEvent e)<br />{<br />System.exit(0);<br />}<br />});<br />}</p><p>/**<br /> * menu的監聽<br /> */<br />public void actionPerformed(ActionEvent e)<br />{<br />//複製<br />if(e.getSource()==copy)<br />{<br />//擷取文字框1中游標選中的值<br />String temp=t1.getSelectedText();<br />//將至以無格式文字格式設定傳送<br />StringSelection text=new StringSelection(temp);<br />//將值設定到系統剪貼簿中<br />clb.setContents(text, null);<br />}<br />//剪下<br />else if(e.getSource()==cut)<br />{<br />String temp=t1.getSelectedText();<br />StringSelection text=new StringSelection(temp);<br />clb.setContents(text, null);<br />//擷取游標選中的起點、終點位置<br />int s=t1.getSelectionStart();<br />int end=t1.getSelectionEnd();<br />//將值從文字框1中刪除<br />t1.replaceRange("", s, end);<br />}<br />//黏貼<br />else if(e.getSource()==paste)<br />{<br />//擷取剪貼簿中的值,con為要進行傳輸操作的資料<br />Transferable con=clb.getContents(this);<br />//表示一個 Java Unicode String 類的 DataFlavor<br />DataFlavor flavor=DataFlavor.stringFlavor;<br />//判斷con是否是支援指定的資料 flavor。<br />if(con.isDataFlavorSupported(flavor))<br />{<br />try<br />{<br />String str;<br />//返回一個對象,該對象表示將要被傳輸的資料<br />str=(String )con.getTransferData(flavor);<br />//將系統剪貼簿返回的資料放到文字框2中<br />t2.append(str);<br />}<br />catch(Exception ee)<br />{</p><p>}<br />}<br />}<br />}<br />}</p><p>public class testcopy {<br />public static void main(String args[])<br />{<br />//調用自訂的表單類<br />new Win();<br />}</p><p>}<br />