使用Ctrl + C缓冲区携带存储语句

时间:2012-04-06 21:21:35

标签: java buffer copy-paste

我正在尝试创建一个应用程序 - 在某个阶段 - 存储由 CTRL + C 复制的所有语句,并操纵带有当前的'缓冲区'对特定陈述的陈述

示例:如果用户按下 CTRL + V 在任何文本区/字段,书面文字都是“你好”,我希望书面陈述是“测试”而不是“你好”

问题是:如何访问带有复制语句的缓冲区并使用Java操作其内容?

1 个答案:

答案 0 :(得分:1)

  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
      }
    }
  }

我为一些简单的可测试性/验证添加了轮询。它会每秒检查一次剪贴板一分钟。据我所知,没有办法做基于事件的通知(除非你正在听味道变化,你不是这样),所以我认为你坚持投票。