所以我创建了一个服务器,效果很好,但是我有点卡在 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/