本文实例讲述了Java利用剪贴板交换程序间数据的实现方法。在图形化系统中,系统剪贴板非常重要,很难想象一个没有剪贴板功能的图形化操作系统使用起来会是怎样。本例就实现了Java 程序与所在系统的剪贴板的数据交流,当单击“Paste”按钮后,Java 程序从系统剪贴板中取得数据并显示在一个JTextArea 组件中;当单击“Copy”按钮后,文本区中的选中文本将被传送到系统剪贴板上。
首先必须得到系统剪贴板的实例引用,java.awt.Toolkit 类中提供了getSystemClipboard()方法来返回一个Clipboard 实例;并且由于Toolkit 类提供了静态方法getDefaultToolkit()返回一个Toolkit实例,因此也不必new 一个Toolkit 对象,具体实现代码如下:
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
此处Clipboard 类提供了getContents()和setContents()方法来实现数据交换。
Transferable getContents(Object requester); Void setContents(Transferable contents, ClipboardOwner owner);
此处的getContents()方法从系统剪贴板中获得一个Transferable 对象,参数requester 表示数据申请者,一般用this 就行了,表示要求数据的是本类的实例对象。如果要求的数据是文本,可以调用Transferable对象的getTransferData(DataFlavor.stringFlavor)得到,实现代码如下:
Transferable tr = cb.getContents(this); String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
setContents()方法从程序中传数据到系统剪贴板,参数contents 表示数据,参数owner 表示剪贴板的拥有者。
StringSelection ss = new StringSelection(this.jTextArea1.getText()); cb.setContents(ss,ss);
上面语句中的StringSelection 类表示选中的文本。
从上面的分析,实际上系统剪贴板中存放的是Transferable对象集合,程序和系统剪贴板的数据交换就是Transferable 对象的传递。程序代码:
1.新建一个Project,取名为JClipDemo。
2.新建一个Application,取名为JClipDemo;主窗口名取名为MainFrame,标题为JClipDemo。
3.在MainFrame 类的设计窗口中添加一个JTextArea 组件、两个JButton 和一个JPanel 组件,并且两个JButton 组件放在JPanel 组件上。添加新的属性Clipboard cb。具体代码如下:
public class MainFrame extends JFrame { private JPanel contentPane; private BorderLayout borderLayout1 = new BorderLayout(); //创建新的组件 private JTextArea jTextArea1 = new JTextArea(); private JPanel jPanel1 = new JPanel(); private JButton jButton1 = new JButton(); private JButton jButton2 = new JButton(); //剪贴板实例 Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); …… }
4.编写MainFrame 类的初始化方法jbInit(),完成各组件的初始属性设置,并为按钮组件添加事件监听器,具体代码如下:
private void jbInit() throws Exception { //setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Your Icon]"))); 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 e) { 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.编写“Copy”按钮的事件处理方法,向系统剪贴板发送数据。
void jButton1_actionPerformed(ActionEvent e) { StringSelection ss = new StringSelection(this.jTextArea1.getText()); //发送选中文本到系统剪贴板 cb.setContents(ss,ss); }
6.编写“Paste”按钮的事件处理方法,从系统剪贴板获得数据。
void jButton2_actionPerformed(ActionEvent e) { try{ Transferable tr = cb.getContents(this); //从系统剪贴板得到一个Transferable 对象 if (tr != null){ String s = (String) tr.getTransferData(DataFlavor.stringFlavor); //从Transferable 对象中得到文本数据 if (s!=null) this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //在JTextArea 组件中的光标所在处插入文本 } }catch(Exception err){ err.printStackTrace(); } }
更多Java利用剪贴板实现交换程序间数据的方法相关文章请关注PHP中文网!

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生产性。1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允许CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java实现“一次编写,到处运行”通过编译成字节码并在Java虚拟机(JVM)上运行。1)编写Java代码并编译成字节码。2)字节码在任何安装了JVM的平台上运行。3)使用Java原生接口(JNI)处理平台特定功能。尽管存在挑战,如JVM一致性和平台特定库的使用,但WORA大大提高了开发效率和部署灵活性。

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允许Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

JavaispoperfulduetoitsplatFormitiondence,对象与偏见,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

Java的顶级功能包括:1)面向对象编程,支持多态性,提升代码的灵活性和可维护性;2)异常处理机制,通过try-catch-finally块提高代码的鲁棒性;3)垃圾回收,简化内存管理;4)泛型,增强类型安全性;5)ambda表达式和函数式编程,使代码更简洁和表达性强;6)丰富的标准库,提供优化过的数据结构和算法。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 英文版
推荐:为Win版本,支持代码提示!