gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:07 26 4
gpt4 key购买 nike

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

现在我想要的是,您只能使用您的命令编辑当前行。上面的所有行(旧命令和结果)都应该是不可编辑的。我该怎么做?

最佳答案

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

这可以使用自定义 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,然后在您重置它时完成了。

关于java - 使 JTextArea 的一部分不可编辑(而不是整个 JTextArea!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030477/

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