格式化的cliboard Java [英] Formatted cliboard Java

查看:212
本文介绍了格式化的cliboard Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,试图找出如何在保存到系统剪贴板时保留Java程序中的文本格式。

它不适用于Microsoft的写字板或Lotus Symphony。相反,如果我在Word中创建一个格式化的字符串并将其复制,那么它适用于所有我试图粘贴到它的审判案例。



我不想要使用任何外部来源,如org.eclipse。*。



下面是我编译的一些链接,可能会帮助我指出正确的方向。



我感觉好像没有使用正确的数据风格?
http:// docs .oracle.com / javase / 1.5.0 / docs / api / java / awt / datatransfer / DataFlavor.html


我找到了这个链接,关于dataflavors很多,但没有说明哪一个用于格式化文本。我明白,虽然这可能不是每个操作系统都一样,我需要检查,以确保它在我使用的操作系统上受支持。

http://www.javaworld.com/cgi-bin/mailto/x_java.cgi?pagetosend=/export/home/httpd/javaworld/javaworld/javatips/jw-javatip61.html&pagename=/ javaworld / javatips / jw-javatip61.html& pageurl = http://www.javaworld.com/javaworld/javatips/jw-javatip61.html&site=jw_core



感谢所有在高级的帮助,我真的很感激它!

Dan



编辑



我目前使用一些代码: 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\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\' \blue0;} \r\\\
这一行是默认的颜色\\\\\\\\\\\\\\\\\之前的制表符\\\\\\\\\\\\\\\\\\\\\\ ...页面此行是默认颜色和第2页上的第一行\r\\\
} \r\\\
;
public static final DataFlavor RTF_FLAVOR = new DataFlavor(text / rtf,Rich Formatted Text);
$ b $ 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;
私有DataFlavor风味;

public MyTransferable(Object o,DataFlavor df)
{data = o; flavor = df; }
$ b public Object getTransferData(DataFlavor df)throws
UnsupportedFlavorException,IOException
{
if(!flavor.isMimeTypeEqual(flavor))
throw new UnsupportedFlavorException (DF);
返回数据;


public boolean isDataFlavorSupported(DataFlavor df)
{
return flavor.isMimeTypeEqual(df);

$ b $ public DataFlavor [] getTransferDataFlavors()
{
DataFlavor [] ret = {flavor};
return ret;






$ div经过大量的四处搜寻,经过反复试验和朋友塞巴斯蒂安和洛根的帮助,似乎已经找到了解决办法。这允许在Java中同时将多种格式的数据保存到剪贴板,同时还保留文本的样式和格式。希望这有助于某人。这也是一个很好的资源。 http://www.pindari.com/rtf1.html

  import java.awt。*; 
import java.awt.datatransfer。*;
import java.io. *;

public class clipBoard {
//创建RTF字符串
private static final String RTF_STRING ={\\\\\\\\\\\\\\ \\r\\\
{\\colortbl; \\red0\\green0\\blue0; \\red255\\green0\\blue0;} \r\ n此行是默认的颜色\\\\行\\\\\\\\\\\\\\\'这条线是红色的\\\\\\\\\\\\\\ \\\
这一行是默认的颜色\\\\\\\}};
//创建纯文本字符串
private static final String PLAIN_STRING =这行是默认的颜色\\\
这行是红色的\\\
这行是默认的颜色;
//特定风格的数据数组
private static final Object data [] = {new ByteArrayInputStream(RTF_STRING.getBytes()),new ByteArrayInputStream(PLAIN_STRING.getBytes())};
//普通优惠
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);
//数组风格
private static final DataFlavor flavors [] = {RTF_FLAVOR,PLAIN_FLAVOR};

public static void main(String [] args){
//创建剪贴板对象
剪贴板cb = Toolkit.getDefaultToolkit()。getSystemClipboard();
//创建可转移对象
可转移p = new MyTransferable(data,flavors);
//传送到剪贴板
cb.setContents(p,null);


静态类MyTransferable实现Transferable {
//数据数组$ b $ private object dataA [] = null;
//风味数组
private DataFlavor flavorA [] = null;

//可转移的类构造函数
public MyTransferable(Object data [],DataFlavor flavors []){
//设置传入本地变量的数据
dataA = data;
//设置口味传入到局部变量
flavorA = flavors;
}
$ b public Object getTransferData(DataFlavor df)抛出UnsupportedFlavorException,IOException {
//如果请求text / rtf flavor
if(df.getMimeType()。包含(text / rtf)){
//返回文本/ rtf数据
返回dataA [0];

//如果请求简单的风格
else if(df.getMimeType()。contains(text / plain)){
//返回文本/明文数据
返回dataA [1];
}
else {
throw new UnsupportedFlavorException(df);


$ b $ public boolean isDataFlavorSupported(DataFlavor df){
//如果flavor为text / rtf或tet / plain返回true
if ()包含(text / rtf)|| df.getMimeType()。contains(text / plain)){
return true;
}
//返回false
else {
return false;


$ b $ public DataFlavor [] getTransferDataFlavors(){
//返回数组
返回flavorA;
}
}
}


I am having an issue trying to figure out how to retain formatting of text in a Java program when saving to the system clipboard.

It does not work with things such as Microsoft's Wordpad or Lotus Symphony. On the contrary, if I create a formatted string in Word and copy it, then it works properly with all the trial cases I try to paste it into.

I do not want to use any external sources such as org.eclipse.*.

Here are some links that I have compiled that might help me get pointed in the proper direction.

I feel as if I am not using the proper Data Flavor? http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/datatransfer/DataFlavor.html

I found this link which talks a lot about dataflavors, but does not shed much light on which one to use for formatted text. I do understand though that this might not be the same on every OS and I need to check to make sure it is supported on the OS I am using.

http://www.javaworld.com/cgi-bin/mailto/x_java.cgi?pagetosend=/export/home/httpd/javaworld/javaworld/javatips/jw-javatip61.html&pagename=/javaworld/javatips/jw-javatip61.html&pageurl=http://www.javaworld.com/javaworld/javatips/jw-javatip61.html&site=jw_core

Thanks for all of your help in advanced, I really appreciate it!

Dan

EDIT

I am currently using some code from: http://lists.apple.com/archives/java-dev/2004/Jul/msg00359.html with a few small changes. The issue I am having currently, is I need to transmit the data to the clipboard in two different formats. "text/rtf" and "text/plain" seeing some programs do not support RTF. I am using inside clipboard to see what is inside the clipboard. I can successfully place either the RTF or the plain text, but not both simultaneously. When I do, only the last one gets added. Your help is greatly appreciated!

In summary, I cannot set the clipboard with two different data flavors at the same time.

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

}

解决方案

After much searching around and trial and error and help from a friend Sebastian and Logan, it seems to be figured out. This allows multiple formats of data to be saved to the clip board at one time in Java while also retaining the styling and formatting of the text. Hopefully this helps someone. This was also a good resource. http://www.pindari.com/rtf1.html

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

这篇关于格式化的cliboard Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆