- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用套接字为 java 创建聊天。我的问题是,当我第一次按回车键时,在用户的框架上,插入符号转到下一行,之后的所有内容我都必须按退格键,否则我写的句子会发送一个空白句子。我使用 KeyListener 来按下回车键,并且在 keyPressed 函数中输入了以下代码。
if(arg0.getKeyCode()==10)
{
System.out.println("Bika sto enter\n");
String toserver = ClientText.text2.getText();
try {
if(toserver.equals("close it")) {
ClientText.clientSocket.close();
}
ClientText.text2.moveCaretPosition(ClientText.text2.getSelectionStart());
ClientText.text2.setCaretPosition(0);
ClientText.text2.setText("");
ClientText.outToServer.writeBytes(toserver+'\n');
//ClientText.outToServer.writeUTF(toserver+'\n');
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
问题是,这仅在我第一次使用聊天后有效。例如,我发送了一些东西,如果我按 Enter 键,插入符号会转到下一行。然后,如果我写一些东西并按回车键,插入符号会转到第二行的开头!因此,每次对此有任何帮助时,我都必须删除第一行空行吗?谢谢
最佳答案
我不确定您的 GUI 究竟是什么样子,但我会使用 javax.swing.JTextField 而不是 JTextArea。如果你想使用 JTextArea(例如允许多行消息)并且你无法让输入发送部分工作,我会求助于使用 KeyListener 作为键输入,就像普通计算机一样(如果一切都失败了)。
这就是我的意思:
import java.awt.event.*;
import javax.swing.JTextArea; //or JTextField
public class KeyInput implements KeyListener{
private JTextArea ta; //or JTextField
public KeyInput(JTextArea ta){ //or JTextField
this.ta = ta;
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//code to send message goes here
}else{
ta.append("\n"+e.getKeyChar());
}
}
//keyReleased(KeyEvent) and keyTyped(KeyEvent) methods go here, need no content
}
请记住,如果您使用 JTextArea,请确保将其放在 JScrollPane 中。
重要:在您的客户端类中,确保添加 ta.setEditable(false)
,其中 ta 是您的 JTextArea 的变量名(同样,可以替换为 JTextField在这种情况下,您不需要 JScrollPane)。
希望这对您有所帮助。
关于java - 按下回车后的 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18079390/
Che 看起来很有前途,但有人在使用它吗?或者它对任何人都有效吗? 偶尔我会尝试让 Che 调试器与 golang 或 nodejs 一起工作。我相信 Che 是开发人员使用 docker 的方式,我
我是一名优秀的程序员,十分优秀!