4

我正在使用套接字为 java 创建一个聊天。我的问题是,当我第一次按 Enter 键时,在用户的框架上,插入符号转到下一行,之后的所有内容我都必须按退格键,否则我写的句子会发送一个空白句子。我使用 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,插入符号会转到下一行。然后,如果我写一些东西并按回车,插入符号会转到第二行的开头!因此,每次对此有任何帮助时,我都必须删除第一行空的行?谢谢

4

1 回答 1

0

我不确定您的 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)。

希望这可以帮助。

于 2013-09-27T22:05:00.340 回答