我在聊天应用中工作。在这个应用程序中,我有一个JTxtField txtMessage
,当用户按Enter键时会发送消息。我想添加一个JButton btn_send
来做同样的事情,但是如果我添加btn_send.addActionListener(enviar_mensaje)
,那么在我按下JTextField
中的Enter之前,该方法不会执行任何操作。
如何将JTxtField
和JButton
用于同一方法?
public void write(){
Thread writeThread = new Thread(new Runnable(){
public void run(){
try{
writer = new PrintWriter(socket.getOutputStream(),true);
txtMessage.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String sendMessage = txtMessage.getText();
writer.println(sendMessage);
txtMessage.setText("");
chatArea.append("Server say: "+sendMessage+"\n");
btnClean.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
chatArea.setText("");
}
});
}
});
}catch(Exception ex){
ex.printStackTrace();
}
}
});
writeThread.start();
}
答案 0 :(得分:1)
ActionListeners的想法是他们收到一些ActionEvent e。
因此,当您想要将同一个侦听器附加到多个对象时,例如:
ActionListener a1 = ...
button.addActionListener(a1);
textField.addActionListener(a1);
然后,当然,您的ActionListener应检查 e 以了解调用它的上下文。
然后:如果您使用的是Java8,可以使用方法引用来提供ActionListeners;请参阅here了解如何做到这一点的非常好的例子!
答案 1 :(得分:0)
我终于可以解决困扰我的问题,我必须采用write()中的方法,然后从ActionListener中调用它们。谢谢大家!!
public void sendMessage(){
String message = txtMessage.getText();
writer.println(message);
txtMessage.setText("");
chatArea.append("Server says: "+message+"\n");
}
public void clean(){
chatArea.setText("");
}
public void write(){
Thread message = new Thread(new Runnable(){
public void run(){
try{
writer = new PrintWriter(socket.getOutputStream(),true);
txtMessage.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendMessage();
}
});
sendBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendMessage();
}
});
cleanBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
clean();
}
});
}catch(Exception ex){
ex.printStackTrace();
}
}
});
message.start();
}