gpt4 book ai didi

java - 计算 JTextPane 中一行文本前的空格数

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:18 24 4
gpt4 key购买 nike

我想知道如何在文本实际开始之前计算给定行上的空格数。对于前。如果我的 JTextPane 中有这个:

public static void main(String[] args) {
int x = 1;

}

在我输入“x = 1;”之后然后按回车键,我希望插入符号与“int x = 1;”的缩进相同开始,所以我不必一直按 Tab 键或手动输入空格。有什么建议吗?

最佳答案

如果您希望新行的缩进与前一行相同,只需检查前一行的第一个字符即可。看看那个:

public class Test {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame mainFrame = new JFrame("test");
mainFrame.setSize(300, 100);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container pane = mainFrame.getContentPane();
pane.setLayout(new BorderLayout());

JTextPane jtp = new JTP();
pane.add(jtp);

mainFrame.setVisible(true);
}
});
}

static class JTP extends JTextPane {
JTP() {
((AbstractDocument)getDocument()).setDocumentFilter(new Filter());
}
}

static class Filter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
StringBuilder indentatedString = new StringBuilder(string);
if(string.equals("\n")) {
AbstractDocument doc = ((AbstractDocument)fb.getDocument());
Element line = doc.getParagraphElement(offset);
int lineStart = line.getStartOffset(), lineEnd = line.getEndOffset();
String content = doc.getText(lineStart, lineEnd - lineStart);
int start = 0;
while(content.charAt(start)==' ') {
indentatedString.insert(0," ");
start++;
}
}
fb.insertString(offset, indentatedString.toString(), attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
if(text.==0) {insertString(fb, offset, text, attrs);}
else if(text.length()>0) {remove(fb, offset, length);insertString(fb, offset, text, attrs);}
else {fb.replace(offset, length, text, attrs);}
}
}
}

这里的重要部分只是完成这项工作的 DocumentFilter。

关于java - 计算 JTextPane 中一行文本前的空格数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31665444/

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