我在尝试弄清楚如何在保存到系统剪贴板时保留 Java 程序中的文本格式时遇到问题。
它不适用于 Microsoft 的写字板或 Lotus Symphony 等软件。相反,如果我在 Word 中创建一个格式化字符串并复制它,那么它可以正常用于我尝试将其粘贴到的所有审判案例。
我不想使用任何外部源,例如 org.eclipse.*。
以下是我整理的一些链接,可能会帮助我找到正确的方向。
我感觉好像我没有使用正确的数据风格?http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/datatransfer/DataFlavor.html
我发现这个链接谈论了很多关于数据风格的内容,但没有太多说明用于格式化文本的数据风格。我确实理解,但这在每个操作系统上可能并不相同,我需要检查以确保我正在使用的操作系统支持它。
感谢您提前提供的所有帮助,我真的很感激!
Dan
EDIT
我目前正在使用以下代码:http://lists.apple.com/archives/java-dev/2004/Jul/msg00359.html有一些小的变化。我当前遇到的问题是我需要以两种不同的格式将数据传输到剪贴板。 “text/rtf”和“text/plain”看到有些程序不支持RTF。我正在使用内部剪贴板来查看剪贴板内的内容。我可以成功放置 RTF 或纯文本,但不能同时放置两者。当我这样做时,只会添加最后一个。非常感谢您的帮助!
总之,我无法同时设置具有两种不同数据风格的剪贴板。
import java.awt.datatransfer.*;
import java.io.*;
public class clipBoard
{
public static final String RTF_STRING = "{\\rtf1\\ansi\\deff0 {\\fonttbl {\\f0 Courier;}}\r \n{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\nThis line is the default color\\line\r\n\\cf2\r\n\\tab This line is red and has a tab before it\\line\r\n\\cf1\r\n\\page This line is the default color and the first line on page 2\r\n}\r\n";
public static final DataFlavor RTF_FLAVOR = new DataFlavor("text/rtf", "Rich Formatted Text");
public static void main(String[] args){
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable t = new MyTransferable(
new ByteArrayInputStream(RTF_STRING.getBytes()), RTF_FLAVOR);
cb.setContents(t, null);
}
static class MyTransferable implements Transferable
{
private Object data = null;
private DataFlavor flavor;
public MyTransferable(Object o, DataFlavor df)
{ data = o; flavor = df; }
public Object getTransferData (DataFlavor df) throws
UnsupportedFlavorException, IOException
{
if (!flavor.isMimeTypeEqual(flavor))
throw new UnsupportedFlavorException(df);
return data;
}
public boolean isDataFlavorSupported (DataFlavor df)
{
return flavor.isMimeTypeEqual(df);
}
public DataFlavor[] getTransferDataFlavors()
{
DataFlavor[] ret = {flavor};
return ret;
}
}
}