2016-10-03 7 views
1

私はチャットアプリケーションで作業しています。このアプリでは、ユーザがEnterを押すとメッセージを送信するJTxtField txtMessageがあります。私は同じことを行う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を提供できます。本当にいい例については、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(); 

} 
関連する問題