codice:package SimpleChat;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JButton;
public class SimpleChatGUI
extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jCP_SimpleChatGUI
= null; private JLabel jLbl_Server
= null; private JLabel jLbl_Nick
= null; private JLabel jLbl_Msg
= null; private JButton jBto_EntraInChat
= null; private SimpleChatServer server;
private SimpleChatClient client;
private static final int serverPort=7777;
private boolean isClientConnected;
/**
* This is the default constructor
*/
public SimpleChatGUI() {
super();
initialize();
//istanzia un client di tipo SimpleChatClient
client=new SimpleChatClient();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(514, 401);
this.setResizable(false);
this.setContentPane(getJCP_SimpleChatGUI());
this.setTitle("Simple Chat v. 1.0");
}
private JPanel getJCP_SimpleChatGUI
() { if (jCP_SimpleChatGUI == null) {
jCP_SimpleChatGUI
= new JPanel();
jCP_SimpleChatGUI.setLayout(null);
jLbl_Msg.setText("Inserisci il tuo messaggio:");
jLbl_Msg.
setBounds(new Rectangle(14, 337, 152, 20
)); jLbl_Nick.setText("Inserisci NickName:");
jLbl_Nick.
setBounds(new Rectangle(14, 311, 152, 20
)); jLbl_Server.setText("Inserisci indirizzo Server:");
jLbl_Server.
setBounds(new Rectangle(14, 284, 150, 20
)); jSP_Chat.
setBounds(new Rectangle(14, 14, 482, 257
)); jBto_EntraInChat.
setBounds(new Rectangle(373, 310, 124, 22
)); jBto_EntraInChat.setText("Entra In Chat");
//Click tasto [Entra in Chat]
jBto_EntraInChat.
addActionListener(new java.
awt.
event.
ActionListener() { public void actionPerformed
(java.
awt.
event.
ActionEvent e
) {
if (jBto_EntraInChat.getText()=="Entra In Chat"){
joinToChat();
}else{
disconnect();
}
}
});
jTxtF_Server.
setBounds(new Rectangle(175, 282, 188, 22
)); jTxtF_NickName.
setBounds(new Rectangle(175, 310, 188, 22
)); jTxtF_Msg.
setBounds(new Rectangle(175, 336, 188, 22
)); jBto_Invia.setText("Invia Msg");
jBto_Invia.
setBounds(new Rectangle(373, 336, 124, 22
)); public void actionPerformed
(java.
awt.
event.
ActionEvent e
) { if (jTxtF_Msg.equals("")) return;
try{
client.start(jTxtF_Server.getText(), serverPort);
client.sendMessage(jTxtF_Msg.getText());
//Operatore ternario:
//variabile = (espr-booleana) ? espr1 : espr2;
//se il valore della espr-booleana č true si assegna a variabile il valore di
//espr1; altrimenti si assegna a variabile il valore di espr2.
strLastText=jTxtA_Chat.getText().equals("")?"":jTxtA_Chat.getText()+"\n";
jTxtA_Chat.setText(strLastText+ jTxtF_NickName.getText()+ " scrive: " + jTxtF_Msg.getText()+"\n");
jTxtF_Msg.setText("");
ex.printStackTrace();
}
}
});
jSP_Chat.setViewportView(jTxtA_Chat);
jCP_SimpleChatGUI.add(jSP_Chat, null);
jCP_SimpleChatGUI.add(jLbl_Server, null);
jCP_SimpleChatGUI.add(jLbl_Nick, null);
jCP_SimpleChatGUI.add(jLbl_Msg, null);
jCP_SimpleChatGUI.add(jTxtF_Server, null);
jCP_SimpleChatGUI.add(jTxtF_NickName, null);
jCP_SimpleChatGUI.add(jTxtF_Msg, null);
jCP_SimpleChatGUI.add(jBto_EntraInChat, null);
jCP_SimpleChatGUI.add(jBto_Invia, null);
}
return jCP_SimpleChatGUI;
}
public void joinToChat(){
//Controlla che sia stato inserito un indirizzo x il server
if(jTxtF_Server.getText().equals("")){
jTxtF_Server.setText("192.168.0.1");
}
//Controlla che sia stato inserito un nickName
if (jTxtF_NickName.getText().equals("")){
JOptionPane.
showMessageDialog(this,
"Inserisci prima un NickName!",
"Attenzione",2
); return;
}
try {
//System.out.println("Invocazione del metodo [start] da classe: [SimpleChatClient]");
client.start(jTxtF_Server.getText(),serverPort);
//System.out.println("Invocazione del metodo [sendMessage] da classe: [SimpleChatClient]");
client.sendMessage("~"+jTxtF_NickName.getText());
//System.out.println("Invocazione del metodo [receiveMessage] da classe: [SimpleChatClient]");
strServerMsg=jTxtF_NickName.getText()+ " " + client.receiveMessage();
//jTxtA_Chat.setText(strServerMsg);
//System.out.println(strServerMsg);
jBto_EntraInChat.setText("Disconnetti");
jBto_Invia.setEnabled(true);
isClientConnected=true;
System.
out.
println("Lancio [startReceivedThread()] da classe: [SimpleChatClient]"); startReceivedThread();
e.printStackTrace();
System.
out.
println("" + e.
getMessage()); }
}
private void disconnect(){
try{
client.start(jTxtF_Server.getText(),serverPort);
client.sendMessage("^"+jTxtF_NickName.getText());
strLastText=jTxtA_Chat.getText().equals("")?"":jTxtA_Chat.getText()+"\n";
jTxtA_Chat.setText(strLastText+ jTxtF_NickName.getText()+ " ha abbandonato la chat!!!" + "\n");
jTxtF_NickName.setText("");
jTxtF_Msg.setText("");
jBto_EntraInChat.setText("Entra In Chat");
jBto_Invia.setEnabled(false);
client.close();
isClientConnected=false;
ex.printStackTrace();
}
}
private void startReceivedThread(){
ParallelClient toRun= new ParallelClient();
msgClientThread.start();
}
public class ParallelClient
implements Runnable{
@Override
public void run() {
while(isClientConnected){
try {
strReceived=client.receiveMessage();
//Nb: se la Stringa strReceived=null => che il client si č disconnesso dal server
if(strReceived==null){
continue;
}
strLastText=jTxtA_Chat.getText().equals("")?"":jTxtA_Chat.getText()+"\n";
jTxtA_Chat.setText(strLastText+ strReceived);
e.printStackTrace();
}
}
}
}
} // @jve:decl-index=0:visual-constraint="10,10"