gpt4 book ai didi

java - JTextPane 中的插入符位置不正确?!错误或预期的行为?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:52 25 4
gpt4 key购买 nike

我遇到了以下问题:

我想读取 JTextComponent 文档中组件插入符号位置的字符。当我使用 JTextPane 时,插入符号位置返回的字符不正确。更详细地说,返回的字符是字符是插入符号的位置减去行数! (插入符号位置 - 当前行的编号)。另一方面,当我使用 JTextArea 时,结果是正确的...为了证明这一点,我已经实现了一个示例程序,您可以使用它。

所以最大的问题是,在 JTextPane 的情况下,我如何获得插入符位置的字符?

为什么 JTextPane 不返回与 JTextArea 相同的插入符号位置,而且为什么 JTextPane 返回的字符不是我们在屏幕上看到的字符?所描述的行为是错误吗?

您可以在下面找到示例程序的代码以及非常有趣和意想不到的结果的屏幕截图

使用 JTextPane。 CARET 位置 17 中的字母是 e。不……

alt text

使用一个 JTextArea。在这里,我的插入符与以前的位置相同,但现在我得到插入符位置 20,返回字母是\r\n(with 是预期的)。

alt text

这是您可以用来查看这种奇怪行为的代码:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;

public class Example extends JFrame {
// use this instead of JTextPane to see the difference

// JTextComponent testingArea = new JTextArea(5,10);
JTextComponent testingArea = new JTextPane();
JButton button = new JButton("test");
JTextComponent resultArea = new JTextField(20);


public Example() {
initialise();
testingArea.setText("line1\r\nline2\r\nline3\r\nline4");
}


private void initialise() {
testingArea.setPreferredSize(new Dimension(100,100));
setLayout(new FlowLayout());
getContentPane().add(testingArea);
getContentPane().add(new JLabel("answer"));
getContentPane().add(resultArea);
getContentPane().add(button);
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
try {
int caretPosition = testingArea.getCaretPosition();
char result = testingArea.getText().charAt(caretPosition);
resultArea.setText("Char at caretPosition " + caretPosition + " is " + result);
}catch (Exception e2) {
e2.printStackTrace();
resultArea.setText("ERROR");
}

}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
final Example ex = new Example();
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
ex.pack();
ex.setVisible(true);

}
});
}
}

感谢您的帮助!

PS 我使用的是 Java 6。

最佳答案

使用

char result = testingArea.getDocument().getText(caretPosition,1).charAt(0);

而不是

char result = testingArea.getText().charAt(caretPosition);

关于java - JTextPane 中的插入符位置不正确?!错误或预期的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878392/

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