gpt4 book ai didi

java - 如何仅使 JTextArea (+JScrollPane) 的下一行可编辑

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:09 26 4
gpt4 key购买 nike

所以我创建了一个服务器,效果很好,但是我有点卡在 GUI 上。你看,我希望它看起来就像命令提示符一样,其中只有下一行是可编辑的,并且它不允许您删除任何其他文本。所以现在我有:

JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta);

然后是框架的东西......

    f.setTitle("Server");
f.setBounds(ss.width - 600, 50, 550, 350);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//added window listener so closes socket connection first
f.setAlwaysOnTop(true);

然后添加它:

    f.add(sc);
jt.setBackground(Color.BLACK);
jt.setForeground(Color.WHITE);
//jt.setEditable(false);

最后,我用来输出到TextArea的方法:

public static void append(String text) {
jt.append(text);
jt.append("\n\n"+System.getProperty("user.name")+" / "+getIp()+" > ");
jt.setCaretPosition(jt.getDocument().getLength());
}

现在我需要为用户按 Enter 键后在 JTextArea 中输入的内容分配一个字符串:>?

jt.addActionListener(...{
public void ActioEvent(ActionEvent e){
String text = JTextArea.getLines().getLastLine().getText().replace(System.getProperty("user.name")+" / "+getIp()+" > ", "");
}
});

也许是这样的?那么我需要拥有它,以便只有“>”之后的部分是可编辑的?

最佳答案

执行此操作的方法是使用 DocumentFilter 。这是 Java 中相当晦涩且很少使用的部分,并且远非易于使用。但是,它允许您在 UI(编辑富文本内容的地方)和底层模型(内容)之间插入 DocumentFilter。您通过过滤器传递所有“插入”和“删除”操作,过滤器可以接受、拒绝或修改它们。您可以对过滤器进行编码,使其仅允许修改命令行,而不允许修改提示符。

正如我所说,这是一段相当困难的编码,并且 Document/DocumentFilter 结构具有很多复杂性,您的特定应用程序不需要。不过,它确实为您提供了所需的设施。

标准 Java 文档页面中有一个教程,但没有高级教程,而且据我所知,网络上的示例很少。

ProtectedTextComponent (感谢 camickr)提供了如何执行类似操作的示例。

关于java - 如何仅使 JTextArea (+JScrollPane) 的下一行可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220988/

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