当前位置: 首页 > 知识库问答 >
问题:

从网站复制到JTextPane会给我带来不需要的格式和html标记

方和豫
2023-03-14

我有一个扩展JTextPane的类,当您将文本从网站复制到JTextPane中时,它会给我提供不需要的格式元素和标记。JTextPane的类型是HTML/Text,并且需要保持这种方式,因为我在代码的另一部分中将链接更改为可点击的链接。

据我所知,当我从web复制并粘贴到JTextPane中时,它会自动尝试保持格式,我不希望这种情况发生。

需要记住的是,我使用的是HTMLEditorKit,我不想在我的存储库中添加另一个大型工具。有没有一个简单的方法,我可以只得到文本,而不是所有的元素和格式粘贴与它?

共有1个答案

薛修能
2023-03-14

如果您不想使用DefaultEditorKit,而只是想将文本复制和粘贴到HtmlEditorKit,您可能会尝试编写自己的粘贴代码,

textPane.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK), "paste");

textPane.getActionMap().put("paste", pasteAction);

class PasteAction extends AbstractAction {

        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                int offset = textPane.getSelectionStart();
                Document sd=textPane.getDocument();
                String value = getClipboard();
                sd.remove(textPane.getSelectionStart(), textPane.getSelectionEnd()-textPane.getSelectionStart());
                textPane.getDocument().insertString(offset, value , null);
                if (value != null) {
                    textPane.setCaretPosition(offset + value.length());
                }
            } catch (Exception exc) {
                exc.printStackTrace();
            }
        }

}

并使用此代码从剪贴板中获取纯文本,

public String getClipboard() throws ClassNotFoundException, UnsupportedFlavorException {
    Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
    DataFlavor htmlStringFlavor = new DataFlavor("text/plain; class=java.lang.String");
    try {
        if (t != null && t.isDataFlavorSupported(htmlStringFlavor)) {
            String text = (String) t.getTransferData(htmlStringFlavor);
            return text;
        }
    } catch (UnsupportedFlavorException e) {
    } catch (IOException e) {
    }
    return null;
}

如果您有菜单项、工具栏或其他触发器,不要忘记将“粘贴”操作绑定到它们。

 类似资料:
  • 我想把网格放在中间,但它总是会离开。我的想法是创建音乐专辑展示照片。 为了解释我想要什么,我显示了一个图像。第一张照片是正在发生的事情,它被称为“爵士乐”是我的目标。 代码是:

  • 我正在尝试为某个特定项目实现一个只查看HTML窗格。我正在使用来呈现HTML,内容类型为。我在我的输入HTML中有表格,所以为了给这些表格加上边框,我考虑使用css样式,但不幸的是没有成功。 如果我把边框属性作为表本身的一部分,那么它可以工作,但不能使用css样式。 下面是我创建的用于重新创建问题的示例代码。content1不会为我的表创建边框,但content2会创建边框。我想使用content

  • 我正在使用表单:复选框,但不起作用。我可以检查html中的项目,当我把submit,debbuging,我看到我已经检查的项目不在我的表单的列表中,列表是空的 形式 @RequestMapping(值=“/ManageStock”,方法=RequestMethod.Get)public ModelAndView ControlStockParapaSaraventa(@RequestParam(“

  • 我开始为我朋友的服务器创建自己的Discord bot,我一直在处理同样的问题。 我写了一个简单的东西,在我和机器人之间进行第一次交互: 这应该在控制台中写入在bot连接的discord服务器上发送的任何消息的内容(它只连接到我的测试服务器) 我不明白为什么这不起作用,所以我开始寻找它并使用“调试”事件。 当运行时,控制台告诉我: 然后它不断发送心跳并承认它,直到我停止它。 告诉我事情不对劲的是:

  • 问题内容: 我的问题是,它不仅需要基本的cookie,而且还要求会话cookie和随机生成的ID。我认为这意味着我需要将Web浏览器模拟器与Cookie罐一起使用? 我曾尝试使用Snoopy,Goutte和其他一些Web浏览器模拟器,但到目前为止,我还无法找到有关如何接收Cookie的教程。我有点绝望了! 谁能给我一个如何在史努比或古特接受饼干的例子吗? 提前致谢! 问题答案: 然后,我们应该能够

  • 现在我想使用javascript或css禁用www.hjk.com网址链接