编辑好内容,按下Enter键,文本框内容发送不了。--------------------------------------------------
//实例15.4 服务器端程序
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class ServerUI extends JFrame   {
JTextArea mainArea;
JTextArea sendArea;
SvrCom server; public void setServer(SvrCom server) {
this.server = server;
} public ServerUI() {
super("服务器端");
Container contain = getContentPane();
contain.setLayout(new BorderLayout());
mainArea = new JTextArea();
JScrollPane mainAreaP = new JScrollPane(mainArea); JPanel panel = new JPanel(new BorderLayout());
sendArea = new JTextArea(3, 8);
JButton sendBtn = new JButton("发送"); /*"发送"命令按钮事件处理*/
sendBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
server.sendMsg(sendArea.getText());//把信息发送到客户端
//把发送信息在服务器端的聊天记录中显示
mainArea.append("【服务器】" + sendArea.getText() + "\n"); 
sendArea.setText("");
}
});

sendBtn.addKeyListener(new KeyAdapter(){
            public void keyTyped(KeyEvent e) {
                if (e.getModifiers() == KeyEvent.CTRL_MASK && e.getKeyChar() == KeyEvent.VK_ENTER)
                 server.sendMsg(sendArea.getText());//把信息发送到客户端
//把发送信息在服务器端的聊天记录中显示
mainArea.append("【服务器】" + sendArea.getText() + "\n"); 
sendArea.setText("");                
            }
        });


JPanel tmpPanel = new JPanel();
tmpPanel.add(sendBtn); panel.add(tmpPanel, BorderLayout.EAST);
panel.add(sendArea, BorderLayout.CENTER); contain.add(mainAreaP, BorderLayout.CENTER);
contain.add(panel, BorderLayout.SOUTH);
setSize(500, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}/** 通讯类SvrCom负责守候数据到来 */
class SvrCom extends Thread {
Socket client;
ServerSocket soc;
BufferedReader in;
PrintWriter out;
ServerUI ui; public SvrCom(ServerUI ui) { // 初始化SvrCom类
this.ui = ui;
ui.setServer(this);
try {
soc = new ServerSocket(2345);
System.out.println("启动服务器成功,等待端口号:2345");
client = soc.accept();// 当客户机请求连接时,创建一条链接
System.out.println("连接成功!来自" + client.toString());
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (Exception ex) {
System.out.println(ex);
}
start();
} public void run() {// 用于监听客户端发送来的信息
String msg = "";
while (true) {
try {
msg = in.readLine();
} catch (SocketException ex) {
System.out.println(ex);
break;
} catch (Exception ex) {
System.out.println(ex);
}
if (msg != null && msg.trim() != "") {
System.out.println(">>" + msg);
//把客户端传来的信息在服务器端的聊天记录显示
ui.mainArea.append(msg + "\n");
}
}
} public void sendMsg(String msg) {// 用于发送信息
try {
out.println("【服务器】" + msg);
} catch (Exception e) {
System.out.println(e);
}
}
}

解决方案 »

  1.   

    e.getModifiers() == KeyEvent.CTRL_MASK && e.getKeyChar() == KeyEvent.VK_ENTER你这句响应CTRL+ENTER一起按下,只响应回车应该只要e.getKeyCode() == KeyEvent.VK_ENTER。
      

  2.   

    [Quote=引用 1 楼 huangxw000 的回复:]e.getModifiers() == KeyEvent.CTRL_MASK && e.getKeyChar() == KeyEvent.VK_ENTER你这句响应CTRL+ENTER一起按下,只响应回车应该只要e.getKeyCode() == KeyEvent.VK_ENTER。
    [/Quote
    ---------------------------
    改了还是不行、
      

  3.   

            Action sentAction = new AbstractAction("发送"){
                    @Override public void actionPerformed(ActionEvent e){
                        server.sendMsg(sendArea.getText());//把信息发送到客户端
                        //把发送信息在服务器端的聊天记录中显示
                        mainArea.append("【服务器】" + sendArea.getText() + "\n");
                        sendArea.setText("");
                    }
                };        /*"发送"命令按钮事件处理*/
            sendBtn.addActionListener(sentAction);        // 输入完,按 ctrl + 回车 发送
            sendArea.getInputMap().put(KeyStroke.getKeyStroke("control ENTER"),"send-message");
            sendArea.getActionMap().put("send-message", sentAction);
      

  4.   

    KeyListener事件不能加给Button,加到JPanel或者JFrame
      

  5.   

    把keyTyped函数改为keyPressed函数sendBtn.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent e) {
    if (e.getKeyChar() == KeyEvent.VK_ENTER)
    server.sendMsg(sendArea.getText());//把信息发送到客户端
    //把发送信息在服务器端的聊天记录中显示
    mainArea.append("【服务器】" + sendArea.getText() + "\n");  
    sendArea.setText("");   
    }
    });