Java JTextPane中的最大CaretPosition不等于带CRLF换行符的Textlength
JEditorPane在换行符后的CaretPosition和文本长度方面有一种奇怪的行为。如果有回车符和换行符,则该换行符后的插入符号位置为1到低,因为Java在计算插入符号位置时将其视为一个字符。但是,Textlength将其正确处理为两个字符。此行为似乎是由于,但我认为不可能使.getCaretPosition与.getText.length同步,而与所使用的换行符无关 我附上了一个小代码。只需将插入符号放在第二行的末尾,然后按update。TextLength为5,但CaretPosition结尾处仅为4。如果我只使用CR作为换行符,这是可以的。一个JTextArea正在做正确的事情。这个问题的根源与之相似 你有什么办法解决这个问题吗Java JTextPane中的最大CaretPosition不等于带CRLF换行符的Textlength,java,swing,newline,jeditorpane,Java,Swing,Newline,Jeditorpane,JEditorPane在换行符后的CaretPosition和文本长度方面有一种奇怪的行为。如果有回车符和换行符,则该换行符后的插入符号位置为1到低,因为Java在计算插入符号位置时将其视为一个字符。但是,Textlength将其正确处理为两个字符。此行为似乎是由于,但我认为不可能使.getCaretPosition与.getText.length同步,而与所使用的换行符无关 我附上了一个小代码。只需将插入符号放在第二行的末尾,然后按update。TextLength为5,但CaretPosit
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
public class test2 extends JFrame {
JTextComponent testingArea = new JEditorPane();
JButton button = new JButton("Update");
JTextComponent resultArea = new JTextField(25);
public test2() {
initialise();
testingArea.setText("01\r\n4");
}
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();
int textLength = testingArea.getText().length();
resultArea.setText("TextLength is " + textLength + ". Current CaretPosition is " + caretPosition);
}catch (Exception ex) {
ex.printStackTrace();
resultArea.setText("ERROR");
}
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
final test2 ex = new test2();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ex.pack();
ex.setVisible(true);
}
});
}
}
这有关系吗?它是否影响您正在做的任何事情??我需要正确的getCaretPosition来动态定义文本的子字符串,并根据模型中的文本显示正确的当前插入符号位置。解决方案显示在您链接到的线程中。您需要从文档而不是组件中获取文本。也许阅读能帮助你理解正在发生的事情。此外,您可能不应该使用绝地武士窗格。它被设计用来显示HTML。使用JTextArea或JTextPane。