- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我拼命尝试在 HTML 模式下的 JTextPane 中实现自定义复制/粘贴。大部分工作正常,我使用 EditorKit.write() 获取 html 内容,使用 editorKit.read() 粘贴它。完美世界。
但是,当我有: <p> test </p>
在我的编辑器中,我尝试复制“es”以获得 <p> tesest </p>
,我得到的是
<p>tes</p>
<p>es</p>
<p>t</p>
知道这一点,我正在尝试找出一种方法来“内联”粘贴应该内联的部分,并在 block 中粘贴复制过程中位于 block 中的部分。通常,
如果我有:
<p>mon beau sapin</p>
<p>roi des forêts</p>
<p>que j'aime ta verdure</p>
如果我复制:
beau sapin</p>
<p>roi des forêts</p>
<p>que
并将其粘贴在“mon”之后,我希望:
<p>mon beau sapin</p>
<p>roi des forêts</p>
<p>que beau sapin</p>
<p>roi des forêts</p>
<p>que j'aime ta verdure</p>
我得到的是:
<p>mon</p>
<p>beau sapin</p>
<p>roi des forêts</p>
<p>que</p>
<p>beau sapin</p>
<p>roi des forêts</p>
<p>que j'aime ta verdure</p>
我尝试了各种方法,例如删除 <p></p>
的第一行和最后一行(EditorKit.read自己将其添加回来),使用editorKit.insertHTML(但是我应该放置什么样的标签?),逐行插入(大多数时候,我在另一个 p
中获得 p
)等。
但真正的问题是不可能在htmlDocument中写出你想要的内容。我该怎么写sapin</p> <p>roi
在指定位置?编辑器套件.read ?它将添加 <p>sapin</p> <p>roi</p>
Editorkit.insertHTML ?我需要精确的包装标签...
我向你展示我的最后一次尝试:
private static void insertHTMLContent(JMathTextPane jtp, String html, int offset) {
Document doc = Jsoup.parse(html);
Elements elts = doc.body().children();
//unwrap the last and first element
if(elts.size()>2) { elts.last().unwrap(); }
if(elts.size()>=1) { elts.first().unwrap(); }
//We add a fake DIV element and remove it just at the next line
editorKit.insertHTML(jtp.htmlDoc, offset, "<div id='copie'>"+doc.body().html()+"</div>", 0, 0, HTML.Tag.DIV);
jtp.getHTMLdoc().setOuterHTML(jtp.getHTMLdoc().getElement("copie"),doc.body().html());
}
我无法向您展示结果:EditorKit.write 尝试自行修复 html。但 HTMLDocument 完全困惑。
供您尝试:
public class Test {
private static JTextPane editor = new Editor();
private static JMenuBar menu = new Menu();
private static String clipboard = "";
private static Action copy = new Copy();
private static Action paste = new Paste();
public static void main(String[] args) {
JFrame f = new JFrame();
f.setContentPane(editor);
f.setJMenuBar(menu);
f.setSize(600, 400);
f.setVisible(true);
}
public static class Editor extends JTextPane {
public Editor() {
this.setDocument(new HTMLDocument());
this.setEditorKit(new HTMLEditorKit());
}
}
public static class Menu extends JMenuBar {
public Menu() {
add(new JButton(copy));
add(new JButton(paste));
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK), "copy");
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK), "paste");
getActionMap().put("copy", copy);
getActionMap().put("paste", paste);
}
}
public static class Copy extends AbstractAction {
public Copy() {super("copy");}
@Override
public void actionPerformed(ActionEvent e) {
StringWriter w = new StringWriter();
try {
editor.getEditorKit().write(w, editor.getDocument(), editor.getCaretPosition(), editor.getSelectedText().length());
} catch (Exception ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}
clipboard = w.toString();
}
}
public static class Paste extends AbstractAction {
public Paste() {super("paste");}
@Override
public void actionPerformed(ActionEvent e) {
try {
editor.getEditorKit().read(new StringReader(clipboard), editor.getDocument(), editor.getCaretPosition());
} catch (Exception ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}
}
}
}
抱歉我太长了。我接受任何帮助。
最佳答案
恐怕没有简单的方法。当您粘贴时,您希望保留原始段落并避免添加新的 <p>
创造,对吗?问题是当前段落和复制的段落可能具有不同的属性。例如。当前为左对齐,但复制的为右对齐。
案件如何解决?为了简化该套件,只需创建 <p>
元素。
您可以尝试从剪贴板内容创建一个独立的 HTMLDocument,并迭代文档的结构,提取元素(段落和文本)并将它们插入到原始文档中。
关于java - 内联复制粘贴 JEditorPane HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437440/
ChatGUI 我使用 2 个 JEditorPane 将文本从一个 Pane 传输到另一个 Pane 。 一旦我传输了数据,我就会执行以下操作: JEditorPane.setText(null);
我试图在我的应用程序中实现聊天功能。我使用了 2 个 JEditorPane。一个用于保存聊天记录,另一个用于将聊天发送到前一个 JEditorPane。 JEditorPane 是 text/h
如何向 JEditorPane 添加建议列表(当用户键入某个单词的一部分以建议以该部分开头的所有标记的列表,例如 Eclipse 中的智能感知)?我已经实现了返回字符串 ArrayList 的方法,但
我已经在网上搜索了一段时间,但我没有找到任何关于它的真实信息......我想知道无论如何可以使用文件完整目录路径打开文件(如java文件) ? 我目前正在使用 FileReader reader =
我试图每 5 秒刷新一次 JEditorPane,如果新数据添加到数据库表中,它应该得到反射(reflect),但它不会重新绘制。 首先我有一个 JFrame,如下所示,在构造函数内调用 public
我想知道是否有一种方式或方法可以让我获取当前显示的 JEditorPane。例如,我有一个 JFrame,可以在其中创建多个选项卡。每当创建选项卡时,都会创建一个新的 JEditorPane 对象,并
我必须编写基于 JEditorPane 的 WebBrowser 应用程序 - 去学校。 我遇到了一点问题,超链接不起作用。 这是我的代码: public class BrowserFrame ext
在 JEditorPane 中,我想搜索一个字符串,我知道 scrollToReference 不起作用,所以我想知道如何迭代 Pane 并查找指定的字符串。 如何迭代 JEditorPane 来查找
我有一个程序将一些 URL 输出到 JEditorPane。我希望 URL 成为超链接。该程序基本上会将 URLS 输出到 JEditorPane,就好像它是日志一样。 我已经得到了一些工作,但它没有
我无法获得 JEditorPane 以将 HTML img 标记呈现为图像。显示的只是一个占位符图形。下面是我的代码。提前致谢。 我看到的: 我的代码: import java.awt.*; impo
public class EditorPane extends javax.swing.JPanel { /** * Creates new form EditorPane */ public E
谁知道如何更改 JEditorPane 的换行符属性? 我无法在我的 JTextPane 文本中找到换行符(它既不是 \n 也不是 \r),所以我可以' 正确计算此文本的行数。我想更改 \n 的换行符
我想知道我们是否可以使用 sethighlighter(new Highlighter()) 方法将两个荧光笔设置为 JEditorpane,其中一个是默认荧光笔,另一个是下划线荧光笔。 最佳答案 R
在下面的代码中,我想在 JEditorPane 上写入 0 到 10000 的数字。但是,JEditorPane 不显示任何内容,除非它完全完成(一次打印所有 0 到 10000)或者操作系统给它时间
我有这个代码: package web.test; import java.awt.Dimension; import java.io.IOException; import javax.swing.
我在使用 JEditorPane 时遇到问题。我想在同一行上左对齐和右对齐文本。 这是我的代码: INFO_AREA = new JEditorPane(); INFO_AREA.setBor
我正在尝试在 JEditorPane 中使用超链接对于某些单词,类似于单击单词以获取其定义的想法。当在编辑器 Pane 中输入单词时,程序会根据列表检查它们并用 some word 替换列出的单词。标
我正在编写一个使用 JEditorPane 制作简单编辑器的程序,它使用超链接允许用户使用简单的超链接监听器在不同页面之间跳转。 问题是我希望能够让用户选择一些文本并将其转换为链接。我发现有很多这样的
我正在用 Java 创建一个 Web 浏览器。在我使用的这个浏览器中 浏览器窗口的 JEditorPane。我正在使用“setPage(String url)”方法 显示页面。浏览器可以显示页面但是有
我正在尝试在 Java JEditorPane 中显示内联图像。下面的代码使用 HTML 内容,可以在 Firefox 中正确显示图像,但不能在 JEditorPane 中显示。任何想法为什么?谢谢。
我是一名优秀的程序员,十分优秀!