Java 使用Ctrl+;C
我试图创建一个应用程序,在某些阶段中,它存储由CTRL+C复制的所有语句,并操纵将当前语句带到特定语句的“缓冲区” 示例:用户按CTRL+C复制“Hello”,如果他在任何文本区域/字段按CTRL+V,写的单词将是“Hello”,我希望写的语句是“Test”而不是“Hello” 问题是:如何使用Java访问携带复制语句的缓冲区并操作其内容?Java 使用Ctrl+;C,java,buffer,copy-paste,Java,Buffer,Copy Paste,我试图创建一个应用程序,在某些阶段中,它存储由CTRL+C复制的所有语句,并操纵将当前语句带到特定语句的“缓冲区” 示例:用户按CTRL+C复制“Hello”,如果他在任何文本区域/字段按CTRL+V,写的单词将是“Hello”,我希望写的语句是“Test”而不是“Hello” 问题是:如何使用Java访问携带复制语句的缓冲区并操作其内容?publicstaticvoidmain(String[]args)抛出异常 public static void main(String[] args)
publicstaticvoidmain(String[]args)抛出异常
public static void main(String[] args) throws Exception
{
// Get a reference to the clipboard
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
// Poll once per second for a minute
for (int i = 0; i < 60; i++)
{
// Null is ok, because, according to the javadoc, the parameter is not currently used
Transferable transferable = clipboard.getContents(null);
// Ensure that the current contents can be expressed as a String
if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor))
{
// Get clipboard contents and cast to String
String data = (String) transferable.getTransferData(DataFlavor.stringFlavor);
if (data.equals("Hello"))
{
// Change the contents of the clipboard
StringSelection selection = new StringSelection("Test");
clipboard.setContents(selection, selection);
}
}
// Wait for a second before the next poll
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// no-op
}
}
}
{
//获取对剪贴板的引用
剪贴板剪贴板=Toolkit.getDefaultToolkit().getSystemClipboard();
//每秒投票一次,持续一分钟
对于(int i=0;i<60;i++)
{
//Null是可以的,因为根据javadoc,该参数当前未使用
可转移=剪贴板.getContents(null);
//确保当前内容可以表示为字符串
if(transferable.isDataFlavorSupported(DataFlavor.stringFlavor))
{
//获取剪贴板内容并转换为字符串
字符串数据=(字符串)transferable.getTransferData(DataFlavor.stringFlavor);
if(data.equals(“Hello”))
{
//更改剪贴板的内容
StringSelection=新StringSelection(“测试”);
剪贴板。设置内容(选择,选择);
}
}
//等待一秒钟,然后再进行下一次投票
尝试
{
睡眠(1000);
}
捕捉(中断异常e)
{
//无操作
}
}
}
我添加了一些简单的可测试性/验证轮询。它将每秒检查一次剪贴板,持续一分钟。据我所知,无法执行基于事件的通知(除非您正在侦听味道更改,而您并没有),所以我认为您只能进行轮询。publicstaticvoidmain(String[]args)抛出异常
{
//获取对剪贴板的引用
剪贴板剪贴板=Toolkit.getDefaultToolkit().getSystemClipboard();
//每秒投票一次,持续一分钟
对于(int i=0;i<60;i++)
{
//Null是可以的,因为根据javadoc,该参数当前未使用
可转移=剪贴板.getContents(null);
//确保当前内容可以表示为字符串
if(transferable.isDataFlavorSupported(DataFlavor.stringFlavor))
{
//获取剪贴板内容并转换为字符串
字符串数据=(字符串)transferable.getTransferData(DataFlavor.stringFlavor);
if(data.equals(“Hello”))
{
//更改剪贴板的内容
StringSelection=新StringSelection(“测试”);
剪贴板。设置内容(选择,选择);
}
}
//等待一秒钟,然后再进行下一次投票
尝试
{
睡眠(1000);
}
捕捉(中断异常e)
{
//无操作
}
}
}
我添加了一些简单的可测试性/验证轮询。它将每秒检查一次剪贴板,持续一分钟。据我所知,没有办法进行基于事件的通知(除非您正在侦听味道更改,而您没有),因此我认为您必须进行轮询。那么您想完全更改操作系统剪贴板的内容吗?不,谢谢。可能是@BlueRaja DannyPflughoeft的副本是的,这是我真正想要的,但不能用一个好的声明来表达,thxSo你想完全改变操作系统剪贴板的内容吗?不,谢谢。可能是@BlueRaja DannyPflughoeft的副本是的,这是我真正想要的,但不能用一个好的声明来表达,谢谢