如何为JTextArea设置缩进?

问题描述 投票:0回答:1

我正在尝试用 Java 制作自己的 IDE。在项目中,有一个 JTextArea 来编写代码,但我想正确处理缩进。

private void handleEnterKey() {
        Document doc = getDocument();
        int caretPosition = getCaretPosition();
    
        if (isBetweenPairs(caretPosition)) {
            try {
                doc.insertString(caretPosition, "\n", null);
    
                int indentLevel = 1;
    
                StringBuilder indentation = new StringBuilder();
                for (int i = 0; i < TAB_SIZE * indentLevel; i++) {
                    indentation.append(' ');
                }
                doc.insertString(caretPosition + 1, indentation.toString(), null);
                setCaretPosition(getCaretPosition()-1);
            } catch (BadLocationException ex) {
                ex.printStackTrace();
            }
        }
    }

在这里,如果我删除这一行:

setCaretPosition(getCaretPosition()-1);

文本区域看起来像这样:

currentline{

|}

所以我说退一步,但这并没有按预期工作,看起来像这样:

currentline{

 |}
java indentation jtextarea caret
1个回答
0
投票

我解决了这个问题。 HandleEnterKey() 方法在实际的“Enter”键之前工作,用于移动下一行。因此,如果我说 setCaretPosition(getCaretPosition()-1),它会先向后移动,然后输入执行它自己的工作。

我使用 SwingUtilities.invokeLater(() -> handleEnterKey());问题就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.