我正在使用套接字为java创建聊天。我的问题是,当我第一次按下Enter键时,用户的框架上,Caret进入下一行,之后的所有内容我必须按退格键,因为否则会在我写的句子中发送一个空白句子。我使用KeyListener按Enter键,并在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键,我发送了一些东西,插入符号就到了下一行。然后,如果我写了一些东西并按下输入,插入符号就会进入第二行的开始!因此,每次有任何帮助时,我都必须删除一条空的第一行?感谢
答案 0 :(得分:0)
我不确定您的GUI究竟是什么样的,但我会使用javax.swing.JTextField而不是JTextArea。如果你想使用JTextArea(例如允许多行消息)并且你无法让enter-to-send部分工作,我会使用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的)。
希望这有帮助。