格式化剪贴板Java
我在试图弄清楚如何在保存到系统剪贴板时在Java程序中保留文本格式时遇到了一个问题 它不适用于诸如微软的写字板或LotusSymphony之类的东西。相反,如果我在Word中创建一个格式化的字符串并将其复制,那么它在我尝试粘贴到的所有审判案例中都能正常工作 我不想使用任何外部源,如org.eclipse.* 以下是我编辑的一些链接,可能会帮助我找到正确的方向 我觉得好像我没有使用正确的数据风格? 我发现这个链接讨论了很多关于dataflavors的内容,但并没有对格式化文本使用哪一个提供太多的说明。但我明白,这可能在每个操作系统上都不一样,我需要检查以确保我正在使用的操作系统支持它 感谢您在advanced中的所有帮助,我真的很感激 丹 编辑 我目前使用的一些代码来自:有一些小改动。我目前面临的问题是,我需要以两种不同的格式将数据传输到剪贴板。“text/rtf”和“text/plain”看到一些程序不支持rtf。我正在使用内部剪贴板查看剪贴板中的内容。我可以成功地放置RTF或纯文本,但不能同时放置两者。当我这样做时,只会添加最后一个。非常感谢你的帮助 总之,我不能同时设置具有两种不同数据风格的剪贴板格式化剪贴板Java,java,formatting,mime-types,clipboard,copy-paste,Java,Formatting,Mime Types,Clipboard,Copy Paste,我在试图弄清楚如何在保存到系统剪贴板时在Java程序中保留文本格式时遇到了一个问题 它不适用于诸如微软的写字板或LotusSymphony之类的东西。相反,如果我在Word中创建一个格式化的字符串并将其复制,那么它在我尝试粘贴到的所有审判案例中都能正常工作 我不想使用任何外部源,如org.eclipse.* 以下是我编辑的一些链接,可能会帮助我找到正确的方向 我觉得好像我没有使用正确的数据风格? 我发现这个链接讨论了很多关于dataflavors的内容,但并没有对格式化文本使用哪一个提供太多的
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;
}
}
}在朋友塞巴斯蒂安和洛根的反复尝试和帮助下,这个问题似乎已经解决了。这允许在Java中同时将多种格式的数据保存到剪贴板,同时保留文本的样式和格式。希望这对某人有所帮助。这也是一个很好的资源
你能粘贴一个工作示例供我们测试吗
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
public class clipBoard{
//Creates the RTF string
private static final String RTF_STRING = "{\\rtf1\\ansi\\deff0\r\n{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\nThis line is the default color\\line\r\n\\cf2\r\nThis line is red\\line\r\n\\cf1\r\nThis line is the default color\r\n}\r\n}";
//Creates the plain text string
private static final String PLAIN_STRING = "This line is the default color \n This line is red \n This line is the default color";
//Array of data for specific flavor
private static final Object data[] = {new ByteArrayInputStream(RTF_STRING.getBytes()),new ByteArrayInputStream(PLAIN_STRING.getBytes())};
//Plain favor
private static final DataFlavor PLAIN_FLAVOR = new DataFlavor("text/plain", "Plain Flavor");
//RTF flavor
private static final DataFlavor RTF_FLAVOR = new DataFlavor("text/rtf", "Rich Formatted Text");
//Array of data flavors
private static final DataFlavor flavors[] = {RTF_FLAVOR,PLAIN_FLAVOR};
public static void main(String[] args){
//Create clip board object
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
//Create transferable object
Transferable p = new MyTransferable(data,flavors);
//Transfer to clip board
cb.setContents(p, null);
}
static class MyTransferable implements Transferable{
//Array of data
private Object dataA[] = null;
//Array of flavors
private DataFlavor flavorA[] = null;
//Transferable class constructor
public MyTransferable(Object data[], DataFlavor flavors[]){
//Set the data passed in to the local variable
dataA = data;
//Set the flavors passes in to the local variable
flavorA = flavors;
}
public Object getTransferData (DataFlavor df) throws UnsupportedFlavorException, IOException{
//If text/rtf flavor is requested
if (df.getMimeType().contains("text/rtf")){
//Return text/rtf data
return dataA[0];
}
//If plain flavor is requested
else if (df.getMimeType().contains("text/plain")){
//Return text/plain data
return dataA[1];
}
else{
throw new UnsupportedFlavorException(df);
}
}
public boolean isDataFlavorSupported (DataFlavor df){
//If the flavor is text/rtf or tet/plain return true
if(df.getMimeType().contains("text/rtf") || df.getMimeType().contains("text/plain")){
return true;
}
//Return false
else{
return false;
}
}
public DataFlavor[] getTransferDataFlavors(){
//Return array of flavors
return flavorA;
}
}
}