使JTextArea的部分不可编辑(而不是整个JTextArea!)

我目前正在使用Swing中的控制台窗口。它基于JTextArea并像普通命令行一样工作。在一行中键入命令,然后按Enter。在下一行中,显示输出,在该输出下,您可以编写下一条命令。

现在,我想只能用命令编辑当前行。上面的所有行(旧命令和结果)均不可编辑。我怎样才能做到这一点?

回答:

您不需要创建自己的组件。

这可以使用自定义DocumentFilter来完成(就像我已经完成的那样)。

您可以从获取文档textPane.getDocument()并通过对其设置过滤器document.setFilter()。在过滤器中,您可以检查提示位置,并且仅在提示之后才允许修改。

例如:

private class Filter extends DocumentFilter {

public void insertString(final FilterBypass fb, final int offset, final String string, final AttributeSet attr)

throws BadLocationException {

if (offset >= promptPosition) {

super.insertString(fb, offset, string, attr);

}

}

public void remove(final FilterBypass fb, final int offset, final int length) throws BadLocationException {

if (offset >= promptPosition) {

super.remove(fb, offset, length);

}

}

public void replace(final FilterBypass fb, final int offset, final int length, final String text, final AttributeSet attrs)

throws BadLocationException {

if (offset >= promptPosition) {

super.replace(fb, offset, length, text, attrs);

}

}

}

但是,这将阻止您以编程方式将内容插入终端的输出(不可编辑)部分。相反,您可以做的是在要添加输出时设置的过滤器上的通过标记,或者(我所做的)在附加输出之前将文档过滤器设置为null,然后在输出时将其重置重做。

以上是 使JTextArea的部分不可编辑(而不是整个JTextArea!) 的全部内容, 来源链接: utcz.com/qa/398842.html

回到顶部