Java 格式化剪贴板

2023-12-13

我在尝试弄清楚如何在保存到系统剪贴板时保留 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;
    }
}

}


经过大量搜索、反复试验以及朋友塞巴斯蒂安和洛根的帮助,似乎已经弄清楚了。这允许在 Java 中一次将多种格式的数据保存到剪贴板,同时还保留文本的样式和格式。希望这对某人有帮助。这也是一个很好的资源。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;
    }
 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 格式化剪贴板 的相关文章

随机推荐

  • 在移动设备上随键盘缩放的全屏 HTML 元素

    我有一个 DIV 元素 我希望它显示为浏览器的完整尺寸 但会有一些填充和圆角 这部分很简单 但我希望当键盘显示为新视口的大小时调整它的大小 我可以使用 window visualViewport height 使用 Javascript 很
  • 错误:具有默认值的输入参数在 Postgres 中也必须具有默认值

    我正在尝试设置default值内的变量function in parameter列出但出现错误 错误 具有默认值的输入参数之后也必须具有默认值 Example Create or replace function test name var
  • php cookie 不更新

    我需要更新一个cookie 我在通过 ajax 调用的 php 文件中执行此操作 这是代码 setcookie items POST id 事实上 如果我写的话 cookie不会更新print r COOKIE items 在 setcoo
  • 从字节数组运行程序而不创建临时文件。 C#

    我在 IIS 服务器 MSSQL 上存储了许多 exe 文件 其中包含报告和对服务器上文件的访问权限 这些文件将在周日更改 连接到 SQL Server 并选择一个 exe 文件后 我正在下载 在 SQL 中选择 现在我有一个分配给变量的字
  • 计算移动平均线 MySQL?

    再会 我使用以下代码来计算 9 天移动平均线 SELECT SUM close FROM tbl WHERE date lt 2002 07 05 AND name id 2 ORDER BY date DESC LIMIT 9 但它不起作
  • 使用带有多选标志的 GetOpenFileName() 时如何获取选定文件的列表?

    我尝试过谷歌搜索 但人们似乎有同样的问题 我们无法获得所选文件的列表 这是一段简单的工作代码 与我使用的类似 OPENFILENAME ofn sizeof ofn wchar t file 1024 file 0 0 ofn lpstrF
  • 访问 Glass 上的后置摄像头

    我查遍了api stackoverflow和google 没有找到任何东西 API中有没有办法访问面向眼睛的相机 我希望能够判断用户的眼睛是睁着还是闭着 这个版本的 GDK 可以实现吗 这就是内置眨眼拍照应用程序正在做的事情吗 AFAIK
  • 数据库事务是否可以防止竞争条件?

    我并不完全清楚数据库系统中的事务是做什么的 我知道它们可以用来完全回滚更新列表 例如 从一个帐户中扣除钱并将其添加到另一个帐户中 但这就是它们所做的一切吗 具体来说 它们可以用来防止竞争条件吗 例如 Java JPA example em
  • 如何知道lambda函数本身的事件源

    我想知道函数中lambda函数的事件源 我想要做的是使用某些 AWS 服务 CloudWatch S3 Step 函数等 中的一个 lambda 函数 并根据服务更改其行为 上下文对象 函数的参数之一 包含有关 lambda 函数的信息 但
  • Java 易失性引用与 AtomicReference

    有什么区别吗volatile对象引用和AtomicReference如果我只想使用get and set 方法来自AtomicReference 简短的回答是 不 来自java util concurrent atomic包文档 去引用 原
  • GDK 图片意图卡在点击接受上

    今天我的 Glass 应用程序上的图片功能停止工作 昨天还好好的 但现在卡在了 点击接受图片 上 我认为这可能与它处理图片和取景器的新方式 至少对我来说 有关 我在玻璃开发者网站上找到的内容已被弃用并且不起作用 我的希望 信念是 新想法是为
  • java中什么时候使用垃圾收集器?

    据我所知 GC仅在JVM需要更多内存时使用 但我不确定 所以 请有人建议这个问题的答案 据我了解 Java 的垃圾收集算法非常复杂 而且并不那么简单 此外 GC 不仅有多种算法可供使用 还可以在 VM 启动时通过传递给 JVM 的参数来选择
  • 您可以将图像“流式传输”到 ffmpeg 来构建视频,而不是将它们保存到磁盘吗?

    我最近的工作涉及以编程方式制作视频 在 python 中 典型的工作流程如下所示 import subprocess Image ImageDraw for i in range frames per second video durati
  • 在php中同时发布和获取

    您对我的问题有什么建议吗 我需要同时使用 get 和 post 获取是因为我需要输出用户输入的内容 并发布 因为我需要访问与该输入相关的 mysql 数据库 它看起来像这样
  • 相当于 Java 中的 CryptoStream .NET?

    我有一个 Visual Basic 中的加密字符串 NET 2008中 加密和解密的函数如下 Imports System Security Cryptography Public Shared Function Encriptar ByV
  • Django Ajax 表单提交错误地重定向到另一个页面

    当我在Django中使用ajax提交评论表单时 页面将重定向到空白页面 显示成功数据 status success msg 添加成功 但不停留在当前页面 我希望页面停留在当前页面并向我显示新评论 这是我的 update comment 视图
  • 当我在 Android 设备上执行“pm”时,为什么会收到分段错误错误?

    我的设备 htcg14 已root 我可以在模拟器上执行 pm 但我的设备无法工作 在我执行 su 之前 它工作正常 shell android pm usage pm list packages f d e s e u FILTER pm
  • 如何在 Android sqlite 中连接列

    我可以在 Android sqlite 中连接两个或更多列吗 例如select columna columnb as columnc from table Try select columna columnb as columnc from
  • 为什么我的 html 不显示从数据库中获取的特殊字符

    我将其包含在我的 php 文件的顶部 我这样做是因为我的 file php 没有在 html 文件中或从数据库查询的数据中显示 或 在我放置 header Content Type text html charset UTF 8 后我的 h
  • Java 格式化剪贴板

    我在尝试弄清楚如何在保存到系统剪贴板时保留 Java 程序中的文本格式时遇到问题 它不适用于 Microsoft 的写字板或 Lotus Symphony 等软件 相反 如果我在 Word 中创建一个格式化字符串并复制它 那么它可以正常用于