所以即时创建一个服务器,这很好用,但是我有点卡在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());
}
现在我需要在输入后为用户输入JTextArea的内容分配一个字符串:>?
jt.addActionListener(...{
public void ActioEvent(ActionEvent e){
String text = JTextArea.getLines().getLastLine().getText().replace(System.getProperty("user.name")+" / "+getIp()+" > ", "");
}
});
也许是这样的? 然后我需要它,以便只有“>”之后的部分是可编辑的吗?
答案 0 :(得分:1)
执行此操作的方法是使用 DocumentFilter 。这是Java中一个相当模糊和很少使用的部分,并且很容易使用。但是,它允许您在UI(编辑富文本内容)和底层模型(内容)之间插入DocumentFilter。你通过了所有'插入'和'删除'通过过滤器操作,可以接受,拒绝或修改它们。您可以将过滤器编码为仅允许修改命令行,而不允许修改提示。
正如我所说,这是一个相当困难的编码,Document / DocumentFilter结构具有很多复杂性,您的特定应用程序并不需要。但它确实为您提供了所需的设施。
标准Java文档页面中有一个教程,但不是高级教程,我所知道的很少的例子都在网上。
ProtectedTextComponent(感谢camickr)提供了一个如何做类似事情的例子。
答案 1 :(得分:0)
使用Collection
a JTextField
让用户在JTextField
上输入内容,按下enter
后,将控件移至下一个JTextField
,同时使上述JTextField
不可编辑,并删除{{1} }} 从中。
希望这有帮助。
答案 2 :(得分:0)
我也同意JTextArea / JTextField方法是常见且简单的方法。
但是如果你想让自己的生活稍微复杂一点,那么你可以查看Protected Text Component,它将为你完成大部分逻辑。
ProtectedDocument
的当前实现只允许您为Document添加保护,而不是删除它,因此您需要做的第一件事就是添加一个方法来清除"清除"所有保护文本。这很容易,您只需清除类中使用的Map中的条目。
接下来,您需要更换默认"输入" JTextPane使用的操作。您可以通过播放文本区域的Key Bindings
来完成此操作。有关基本信息,请参阅Key Bindings。在您的自定义操作中,您首先需要调用新创建的" clear(...)"方法。然后,您将文本添加到文本区域。最后你会保护所有的文字,但最后的" x"字符数。