2016-10-03 61 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(); 

} 
相關問題