最近课程作业在做一个聊天软件,想要实现按回车键发送消息,按crtl+回车键换下一行的功能。结果实测发现如果使用按键监听函数addKeyListener触发按键事件的话不仅会把文本发出去,还会在发送文本框内加一个回车键换行,也就是按下回车后不仅执行了addKeyListener事件还执行了系统默认的【输入回车符】的事件。
下面是失败的截图,按下回车发送后会在发送文本框添加回车符号,导致后面发的都是换过行的
网上查了很多无果,倒是发现textarea的相似问题比较多,但是没有Jtextarea的。输入键盘事件后查看函数,发现里面的consume函数正好可以符合需求:屏蔽系统的默认事件。
在按键监听函数内添加e.consume(),实现了屏蔽回车键换行。
按键监听函数:
send_area.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
//crtl+回车切换下一行
if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
e.consume();
send_area.append("\n");
}
//回车键发送
else if(e.getKeyCode() == KeyEvent.VK_ENTER) {
//DEBUG:发送后接收域变色
e.consume();
recv_area.setBackground(Color.green);
//发送并清空发送域,在接受域的下一行回显
String send_content = new String();
send_content = send_area.getText();
send_area.setText("");
recv_area.append(send_content);
recv_area.append("\n");
}
}
});
其中的各种area什么的是我用swing编GUI时的容器。附一个成功截图。