2016-10-03 45 views
1

我正在使用聊天应用程序。在这个应用程序中,我有一个JTxtField txtMessage,当用户按Enter键时发送消息。我想添加一个JButton btn_send它做同样的事情,但如果我添加btn_send.addActionListener(enviar_mensaje)该方法不会做任何事情,直到我在JTextField按Enter键。如何在Java中使用与其他元素相同的actionListener

如何使用JTxtFieldJButton作为相同的方法?

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

您正在'actionPerformed'内添加一个动作侦听器吗?这不好。在线程之前准备动作侦听器(我不知道它是什么)。 – user1803551

+0

并提示:这里的主要语言是**英语**。代码也是如此;所以不要直接粘贴源代码,而要考虑创建一个使用英文术语的最小可行示例。帮助很多人收到良好的答案。而且:under_bares在Java中是不可行的,你只能**在SOME_CONSTANT中使用它们。 – GhostCat

+0

@ user1803551当我执行这些更改时,我会告诉你。 –

回答

1

ActionListeners的想法是,他们收到一些ActionEvent e。

所以,当你想同一个监听器附加到多个对象,像:

ActionListener a1 = ... 

button.addActionListener(a1); 
textField.addActionListener(a1); 

那当然,你的ActionListener应该检查该ê为了了解它是上下文调用。然后:如果您使用的是Java8,则可以使用方法引用以提供ActionListeners;如果您使用的是Java8,则可以使用方法引用来提供ActionListeners;请参阅here一个非常好的示例如何做到这一点!

+0

这是一个有趣的答案,我在提交更改时告诉你;) –

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(); 

} 
相关问题