【问题标题】:Custom Clipboard Data自定义剪贴板数据
【发布时间】:2014-02-21 16:54:31
【问题描述】:

如何将剪贴板信息存储为以非标准、自定义方式表示的数据?

我的公司有一个定制的 SWT 控件,用于创建带有掩码的文本框,允许用户填写诸如电话号码之类的提示:

当复制来自该控件的数据时,我想要一种方式,以便后续粘贴的数据因上下文而异。例如,如果将上下文复制并粘贴到文本文件中,我希望包含被屏蔽的字符。但是,如果它被粘贴到我们系统中的其他某些控件中,我希望它只粘贴非掩码字符。由于掩码控件中的掩码字符可以使用任意字符,因此无法使接收粘贴的控件解析粘贴的结果。因此,我认为实现此目的的唯一方法是自定义复制数据在剪贴板中的存储方式。这可信吗?

【问题讨论】:

    标签: java swt clipboard paste masking


    【解决方案1】:

    如果您使用自定义版本的Text 控件并覆盖copy() 方法,您可以使用自己的代码复制到Clipboard 对象。剪贴板中的数据格式由您使用的Transfer 对象控制。您可以提供几个不同的Transfer 对象和数据:

    Clipboard clipboard = new Clipboard(display);
    
    String maskedData = "*******";
    String unmaskedData = "password";
    
    TextTransfer textTransfer = TextTransfer.getInstance();
    UnmaskedTransfer umaskedTransfer = UnmaskedTransfer.getInstance();
    
    Transfer [] transfers = new Transfer [] {textTransfer, umaskedTransfer};
    Object [] data = new Object [] {maskedData, unmaskedData};
    
    clipboard.setContents(data, transfers);
    
    clipboard.dispose();
    

    UnmaskedTransfer 是您自己的Transfer 实现,它具有未屏蔽的密码。系统中需要获取未屏蔽文本的控件可以使用该 Transfer 对象向剪贴板询问数据(假设这些控件在您的代码中并且可以自定义以执行此操作)。

    不知道特殊Transfer 对象的控件将使用TextTransfer 并接收掩码密码。

    自定义Text 控件可能如下所示:

    public class CustomText extends Text
    {
      public CustomText(final Composite parent, final int style)
      {
        super(parent, style);
      }
    
      @Override
      public void copy()
      {
        // TODO your copy code
      }
    
      @Override
      public void paste()
      {
        // TODO your paste code
      }
    
      @Override
      protected void checkSubclass()
      {
        // Don't call super to stop subclassing exception
      }
    }
    

    【讨论】:

    • 我想这正是我想要的!下周我得试试看!
    • 我在理解如何正确覆盖剪切/复制/粘贴方法时遇到了一些麻烦。这些方法似乎不会通过正常方式触发(ctrl+X/C/V,上下文菜单选项)。你能详细说明这部分吗?
    • 添加了自定义文本控件的轮廓。
    • 我确实是这样做的,但没有成功。我已经就此事发布了一个新问题:stackoverflow.com/q/22050899/1961815
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2013-12-19
    • 1970-01-01
    • 2014-09-18
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多