有没有办法在将不可显示的字符写入JTextArea之前捕获它们?

时间:2010-01-25 11:08:41

标签: java

我将我的keyTyped行为改为默认输出char到JTextArea,但是当我复制和粘贴时,它会产生一个不可显示的字符。

我需要在多个操作系统上工作,因此使用案例22:不起作用,因为这不适用于Mac。 sun是否有一个案例可以捕获粘贴/副本免受操作系统限制,或者有人知道一个好的解决方法吗?

2 个答案:

答案 0 :(得分:2)

您可能需要调查document filters

添加文档过滤器将允许您修改(甚至阻止)添加到JTextArea文档的字符串。如果您的文本区域使用AbstractDocument的某个子类作为文档实现,则可以添加自定义文档过滤器。像这样:

AbstractDocument doc = (AbstractDocument)textArea.getDocument(); 
doc.setDocumentFilter( new DocumentFilter() {
  public void insertString( FilterBypass fb, int offset, String string,
      AttributeSet attr ) throws BadLocationException
  {
    // Test string here and modify if required, then call super.insertString()
    // (usually called on a "paste")
  }

  public void replace( FilterBypass fb, int offset, int length,
      String text, AttributeSet attrs ) throws BadLocationException
  {
    // Test string here and modify if required, then call super.replace()
    // (usually called when characters are typed)
  }
});

(在你的“真实”实现中,你可能想要很好地测试AbstractDocument实际上是在使用而不是我已经完成的演员。)

答案 1 :(得分:0)

我认为您可以通过以下方式修改剪贴板行为:

  1. 创建一个实现TransferHandler功能
  2. importData()
  3. 通过调用JComponent.setTransferHandler()
  4. 在您的函数上设置transferHandler