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를 수신한다는 것입니다.

그래서, 당신처럼, 여러 개체에 동일한 수신기를 첨부 할 경우에 :

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

}