【问题标题】:Problem copying HTML from JEditorPane to external applications将 HTML 从 JEditorPane 复制到外部应用程序时出现问题
【发布时间】:2010-09-16 13:45:02
【问题描述】:

我在将 HTML 从 JEditorPane 复制到系统剪贴板然后粘贴到其他应用程序时遇到问题:

  • OpenOffice 3.2 - 显示“请求的剪贴板格式不可用”
  • Thunderbird 3.13 - 粘贴时不执行任何操作
  • Firefox 3.6.9 - 接受纯文本,但例如在 GMail 中“撰写邮件”在粘贴时不执行任何操作

顺便说一下,我正在运行 WinXP。在文本编辑器、MS Outlook、MS Word 等其他应用程序中,它按预期工作,即我得到带有 HTML 标签的纯文本,或者根据应用程序想要的 mimetype 格式化文本。

有人知道怎么了?这是 Swing 还是 OpenOffice/Mozilla 的问题?

请参阅下面的测试应用程序并尝试一下。我也尝试过使用自定义 Transferable,但是一旦我提供了带有 mimetype="text/html" 的 DataFlavor,它就停止在上述应用程序中工作。 p>

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * Demonstrates problem with copy/paste between JEditorPane and OpenOffice/Thunderbird/Firefox.
 * 
 * @author martin
 */
public class HtmlCopyDemo extends JFrame
{
    public HtmlCopyDemo()
    {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        setSize(400, 400);

        final JEditorPane editor = new JEditorPane();
        editor.setContentType("text/html");
        editor.setText("<html><head></head><body>Here's some <b>formatted</b> <i>text</i></body></html>");
        add(editor, BorderLayout.CENTER);

        JPanel panel = new JPanel(new FlowLayout());
        add(panel, BorderLayout.NORTH);

        JButton button = new JButton("Copy");
        panel.add(button);
        button.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                editor.selectAll();
                editor.copy();
            }
        });

        final JComboBox combo = new JComboBox(new Object[]{"text/html", "text/plain"});
        panel.add(combo);
        combo.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                String text = editor.getText();
                editor.setContentType((String) combo.getSelectedItem());
                editor.setText(text);
            }
        });
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new HtmlCopyDemo().setVisible(true);
            }
        });
    }
}

【问题讨论】:

    标签: java swing openoffice.org mozilla jeditorpane


    【解决方案1】:

    这很可能是接收器端的问题。 (我不能 100% 确定,因为我没有你的环境。)

    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 添加到按钮的actionPerformed 中,我可以看到剪贴板中包含完整的html 内容:

    <html>
      <head>
    
      </head>
      <body>
        Here's some <b>formatted</b> <i>text</i>
      </body>
    </html>
    

    粘贴到 Word 2007 可以正常工作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 2020-10-22
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2012-07-08
    相关资源
    最近更新 更多