gpt4 book ai didi

java - 获取 JTextPane 中选定文本的属性

转载 作者:行者123 更新时间:2023-12-02 04:54:16 25 4
gpt4 key购买 nike

我试图找出如何获取 JTextPane 中某些选定文本的属性。我发现最好的解决方案是使用 getInputAttributes() 和 CaretListener 来实现,但我对此实现有一些问题。

这是我的解决方案,显示插入符号最后位置上的文本属性,但不显示插入符号的实际位置。我究竟做错了什么?请。

enter image description here

这是我的 SSCCE:

public class Testovani{
static JTextPane pane;
static JLabel label;

public static void main(String[] args) throws BadLocationException {
JFrame frame = new JFrame();
frame.setSize(350, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());

pane = new JTextPane();
label = new JLabel();
pane.addCaretListener(new SelectionListener());

MutableAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setBold(attrs, true);
pane.getDocument().insertString(0, "\n", null);
pane.getDocument().insertString(0, "This is first row non bold", null);
pane.getDocument().insertString(0, "\n", null);
pane.getDocument().insertString(0, "This is second row bold", attrs);
pane.getDocument().insertString(0, "\n", null);
pane.getDocument().insertString(0, "This is third row bold", attrs);
pane.getDocument().insertString(0, "\n", null);

frame.add(pane);
frame.add(label, BorderLayout.SOUTH);
frame.setVisible(true);
}

private static class SelectionListener implements CaretListener{
@Override
public void caretUpdate(CaretEvent e) {
AttributeSet attrs =((StyledEditorKit)pane.getEditorKit()).getInputAttributes();
label.setText("Is bold: " + String.valueOf(StyleConstants.isBold(attrs)));
}
}}

我有两个额外问题。这种方法对于选择有用还是仅仅对于插入符的位置有用?如果选择的文本的一部分是粗体而第二部分不是粗体,那么返回什么?

最佳答案

获取选择的属性没有预期的行为,只是因为选择可以包含具有不同属性的字符元素。

您必须了解 getInputAttributesgetCharacterAttributes 之间存在差异,前者返回 textPane 为下一个输入计算出的最佳属性,后者返回以下属性当前插入符位置。在选择的情况下,插入符号是结束选择的位置。如果您从左到右或从右到左选择文本,则它可以是给出的 getSelectionStartgetSelectionEnd

无论如何,我建议您获取 JTextPane 的 StyledDocument,然后迭代从 getSelectionStartgetSelectionEnd 的字符元素:

for(int i=jtp.getSelectionStart(); i<jtp.getSelectionEnd(); i++) {
AttributeSet set = jtp.getStyledDocument().getCharacterElement(i).getAttributes();
//here, combine, analyse, do whatever you like with your AttributeSet
//You can use StyleConstants.xxx to analyse the attributes
}

关于java - 获取 JTextPane 中选定文本的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28927274/

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