gpt4 book ai didi

java - 如何将可点击的文本插入到 JTextPane 中?

转载 作者:行者123 更新时间:2023-11-30 03:26:37 25 4
gpt4 key购买 nike

我制作一个聊天程序已经有几天了,我完全不知道如何在不使用 HTML 的情况下创建一个漂亮的可点击文本。我尝试使用 HTML,但得到了极其奇怪的结果(见下文)。所以我现在只是使用基本文本而不是文本/html。

clickable text with html

我添加可点击文本的第一次尝试是使用 JTextPane 的功能来随文本插入 Component。它插入并工作得很好,但它垂直偏移并且看起来很糟糕。我试图搞乱 setAlignmentY,但没能将组件与文本对齐。

    JLabel l = new JLabel(test);
l.setFont(this.getFont());
l.setCursor(new Cursor(Cursor.HAND_CURSOR));
l.setBackground(Color.RED); //Just so i could see it better for testing
l.addMouseListener(new FakeMouseListener());
this.insertComponent(l);

我正在使用 JTextPane 并使用 doc.insertString 插入文本。我使用系统行分隔符跳过行,因此一行可以包含多个 doc.insertString (这就是我在尝试使用 text/html 时遇到的麻烦)。

最佳答案

这样插入 HTML 时不会出现任何对齐问题。我认为(“认为”是因为我没有足够的代码来了解)您在使用 HTMLEditorKit.insertHTML 时由于 Document.insertString 而遇到了问题。

public class Example extends JFrame {

Example() {

JEditorPane pane = new JEditorPane();
pane.setEditable(false);
pane.setContentType("text/html");
HTMLDocument doc = (HTMLDocument) pane.getDocument();
HTMLEditorKit editorKit = (HTMLEditorKit) pane.getEditorKit();

try {
editorKit.insertHTML(doc, doc.getLength(), "<a href=\"http://click.com\">clickable1</a>", 0, 0, null);
editorKit.insertHTML(doc, doc.getLength(), "<a href=\"c2\">clickable2</a>", 0, 0, null);
editorKit.insertHTML(doc, doc.getLength(), "<a href=\"c3\">clickable3</a>", 0, 0, null);
} catch (BadLocationException | IOException e) {
e.printStackTrace();
}

pane.addHyperlinkListener(new HyperlinkListener() {

@Override
public void hyperlinkUpdate(HyperlinkEvent e) {

if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
System.out.println(e.getSourceElement());
if (e.getURL() != null)
System.out.println(e.getURL());
else
System.out.println(e.getDescription());
System.out.println("-----");
}
}
});

add(pane);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

public static void main(String[] args) {

new Example();
}
}

注释:

    必须调用
  • setEditable(false) 才能使其正常工作(否则可能有一些复杂的方法使其工作)。
  • HyperlinkListener 只是为了证明链接有效,以及如何获取链接字符串的一些演示(getURL 仅在链接有效时才有效)网址)。
  • 无论有或没有HyperlinkListener,您都不需要设置光标。

关于java - 如何将可点击的文本插入到 JTextPane 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30041021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com