[CODE lang="java" title="Klasse Client"]import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
private JFrame frame;
private JTextField txtField_Chatname;
private JTextField txtField_Passworteingabe;
private JTextField txtField_Userschreibt;
private JTextField txtField_Passwortabfrage;
private JTextArea txtArea_Ausgabe;
private JScrollPane scrollPane_Ausgabe;
private JTextArea txtArea_Eingabe;
private JScrollPane scrollPane_Eingabe;
private JButton btnChaten;
private JButton btnSend;
private JButton btnSendSave;
private JButton btnPasswortprüfen;
//-----------------------------------------------------------------
String name;
String nachricht;
String passwort;
String passworttest;
String sicherheit;
//------------------------------------------------------------------
Socket client;
PrintWriter writer;
BufferedReader reader;
//-------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
public static void main(String[] args)
{
GUI();
}
public static void GUI()
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
Client window = new Client();
window.frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
// Client Verbindung zum Server
public boolean connectToServer()
{
try
{
client = new Socket("127.0.0.1", 5555); // Erzeuge Verbindung zu Server
reader = new BufferedReader(new InputStreamReader(client.getInputStream())); // InputStream
writer = new PrintWriter(client.getOutputStream()); // OutputStream
txtArea_Ausgabe.append("Verbindung hergestellt\n"); // ausgabe Verbindung wurde hergestellt.
return true;
}
catch(Exception e)
{
txtArea_Ausgabe.append("Verbindung konnte nicht hergestellt werden\n"); // if(!connectToServer())
//e.printStackTrace();
return false;
}
}
// Message wird als ein String an den Server gesendet
public void sendMessageToServer()
{
String message = new String ();
message = sicherheit + "|" + name + "|" + passwort + "|" + nachricht ;
writer.println(message); // zeile wird an server gesendet
writer.flush();
}
// Message wird vom Server empfangen
public class MessagesFromServerListener implements Runnable
{
@Override
public void run()
{
String nachrichtAus = null;
try
{
while((nachrichtAus = reader.readLine()) != null)
{
appendTextMessages(nachrichtAus);
txtArea_Ausgabe.setCaretPosition(txtArea_Ausgabe.getText().length());
}
}
catch (IOException e)
{
//txtArea_Ausgabe.append("Nachricht konnte nicht empfangen werden!");
//e.printStackTrace();
}
}
}
// Text wird dem Chatverlauf hinzugefügt
public void appendTextMessages(String nachrichtAus)
{
// Test
//txtArea_Ausgabe.append("\n"+ nachrichtAus);
//writer.println(sicherheit + "|" + name + "|" + passwort + "|" + nachricht );
// hier müssen die Ausgaben abgefragt werden
String sicherheitAus;
String nameAusgabe;
String passwortAusgabe;
String nachrichtAusgabe;
String str = nachrichtAus;
String split[] = str.split("\\|");
sicherheitAus = split[0] ;
nameAusgabe = split[1] ;
passwortAusgabe = split[2];
nachrichtAusgabe = split[3] ;
// Test
/*
System.out.print(sicherheitAus + "\n");
System.out.print(nameAusgabe + "\n");
System.out.print(passwortAusgabe + "\n");
System.out.print(nachrichtAusgabe + "\n");
txtArea_Ausgabe.append(nameAusgabe + ":" + nachrichtAusgabe +"\n");
*/
if (sicherheitAus.contains("0"))
{
txtArea_Ausgabe.append( nameAusgabe + " : " + nachrichtAusgabe + "\n");
}
else if (sicherheitAus.contains("1"))
{
txtField_Userschreibt.setText(nameAusgabe);
btnPasswortprüfen.addActionListener(new btnPasswortprüfenListener());
// frage btnPasswortprüfenListener nach Passwort!
txtArea_Ausgabe.append( nameAusgabe + " : " + nachrichtAusgabe + "\n" );
if (passwortAusgabe == passworttest)
{
//txtArea_Ausgabe.append( nameAusgabe + " : " + nachrichtAusgabe + "\n");
}
else
{
txtArea_Ausgabe.append("falsches Passwort für Save Chat Nachricht von " + nameAusgabe + "\n" );
}
}
}
//-----------Listener Buttons----------------------------------------------------------------------------------------------------------------------
// Sucht Chatusername
public class btnChatenListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
name = txtField_Chatname.getText();
}
}
// Sendebutton für normale Nachrichten
public class btnSendListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
nachricht = txtArea_Eingabe.getText();
passwort = txtField_Passworteingabe.getText();
sicherheit = "0";
sendMessageToServer(); // nachricht an Server senden
txtArea_Eingabe.setText(null);
if (passwort.length() == 9)
{
// führe aus
// sende an server user, nachricht, passwort
//txtArea_Ausgabe.append(name +": " + nachricht + "\n");
}
}
}
// Sendebutton für sichere Nachrichten
public class btnSendSaveListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
nachricht = txtArea_Eingabe.getText();
passwort = txtField_Passworteingabe.getText();
sicherheit = "1";
if (passwort.length() == 9)
{
// führe aus
// sende an server user, nachricht, save passwort
//txtField_Userschreibt.setText(name);
sendMessageToServer(); // nachricht an Server senden
txtArea_Eingabe.setText(null);
}
else
txtField_Passworteingabe.setToolTipText("Das Passwort muss genau 9 Zeichen haben");
}
}
// Passwortprüfen
public class btnPasswortprüfenListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
passworttest = txtField_Passwortabfrage.getText();
}
}
//-----------------------------------------------------------Layout------------------------------------------
public Client()
{
initialize();
}
public void initialize()
{
// Neues Fenster
frame = new JFrame();
frame.getContentPane().setBackground(new Color(188, 212, 230)); // Farbe Hintergrund
frame.setBounds(100, 100, 750, 800); // Größe Fenster
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Schließen wenn das Fenster geschloßen wird
frame.getContentPane().setLayout(null);
//--------------Titel--------------------------------------------------------
JLabel lblSaveChat = new JLabel("Projekt Save Chat");
lblSaveChat.setFont(new Font("Arial", Font.BOLD, 12));
lblSaveChat.setBounds(28, 11, 102, 14);
frame.getContentPane().add(lblSaveChat);
//-------------Chatverlauf--------------------------------------------------------------------------
scrollPane_Ausgabe = new JScrollPane();
scrollPane_Ausgabe.setBounds(28, 36, 442, 474);
frame.getContentPane().add(scrollPane_Ausgabe);
txtArea_Ausgabe = new JTextArea();
txtArea_Ausgabe.setEditable(false);
txtArea_Ausgabe.setBorder(null);
txtArea_Ausgabe.setToolTipText("Chatverlauf");
txtArea_Ausgabe.setLineWrap(true);
scrollPane_Ausgabe.setViewportView(txtArea_Ausgabe);
//-----------Client-----------------------------------------------------------------
JLabel lblname = new JLabel("Chatname eingeben");
lblname.setFont(new Font("Arial", Font.PLAIN, 12));
lblname.setBounds(502, 36, 198, 14);
frame.getContentPane().add(lblname);
txtField_Chatname = new JTextField();
txtField_Chatname.setToolTipText("Geben Sie hier Ihren Namen ein ");
txtField_Chatname.setBounds(502, 56, 96, 20);
frame.getContentPane().add(txtField_Chatname);
txtField_Chatname.setColumns(10);
btnChaten = new JButton("chat on");
btnChaten.setFont(new Font("Arial", Font.PLAIN, 12));
btnChaten.setBackground(new Color(0, 255, 255));
btnChaten.setToolTipText("Drücken Sie hier um dem Chat beizutreten");
btnChaten.setBounds(611, 55, 89, 23);
frame.getContentPane().add(btnChaten);
// Aktion
btnChaten.addActionListener(new btnChatenListener());
//--------------Texteingabe-----------------------------------------------------------------------------
JLabel lblTexteingabe = new JLabel("Texteingabe");
lblTexteingabe.setFont(new Font("Arial", Font.PLAIN, 12));
lblTexteingabe.setBounds(29, 521, 75, 14);
frame.getContentPane().add(lblTexteingabe);
scrollPane_Eingabe = new JScrollPane();
scrollPane_Eingabe.setBounds(28, 546, 442, 83);
frame.getContentPane().add(scrollPane_Eingabe);
txtArea_Eingabe = new JTextArea();
txtArea_Eingabe.setText("Deine Nachricht");
txtArea_Eingabe.setBorder(null);
txtArea_Eingabe.setToolTipText("Geben Sie hier Ihre Nachricht ein...");
txtArea_Eingabe.setLineWrap(true);
scrollPane_Eingabe.setViewportView(txtArea_Eingabe);
//---------Passworteingabe----------------------------------------------------------------------------------
JLabel lblPasswort = new JLabel("Passwort (9 Zeichen)");
lblPasswort.setFont(new Font("Arial", Font.PLAIN, 12));
lblPasswort.setBounds(28, 669, 124, 14);
frame.getContentPane().add(lblPasswort);
txtField_Passworteingabe = new JTextField();
txtField_Passworteingabe.setToolTipText("Geben Sie hier ein Passwort mit genau 9 Zeichen ein");
txtField_Passworteingabe.setBounds(28, 694, 113, 20);
frame.getContentPane().add(txtField_Passworteingabe);
txtField_Passworteingabe.setColumns(10);
//--------Senden------------------------------------------------------------------------------------------------
btnSend = new JButton("Send");
btnSend.setBackground(new Color(255, 240, 245));
btnSend.setFont(new Font("Arial", Font.PLAIN, 12));
btnSend.setForeground(new Color(0, 0, 0));
btnSend.setToolTipText("Nachricht wird an alle User zugestellt");
btnSend.setBounds(209, 676, 113, 23);
frame.getContentPane().add(btnSend);
JLabel lblSendnormal = new JLabel("Nachricht wird an alle User zugestellt");
lblSendnormal.setFont(new Font("Arial", Font.PLAIN, 11));
lblSendnormal.setBounds(344, 679, 185, 14);
frame.getContentPane().add(lblSendnormal);
// Aktion Normaler Sendeknopf
btnSend.addActionListener(new btnSendListener());
//-------Sicher Senden---------------------------------------------------------------------------------------------
btnSendSave = new JButton("Send Save");
btnSendSave.setBackground(new Color(216, 191, 216));
btnSendSave.setFont(new Font("Arial", Font.PLAIN, 12));
btnSendSave.setToolTipText("User muss das Passwort eingeben um die Nachricht zu sehen");
btnSendSave.setBounds(209, 710, 113, 23);
frame.getContentPane().add(btnSendSave);
JLabel lblSendSave = new JLabel("User muss das Passwort eingeben um die Nachricht zu sehen");
lblSendSave.setFont(new Font("Arial", Font.PLAIN, 11));
lblSendSave.setBounds(344, 710, 316, 20);
frame.getContentPane().add(lblSendSave);
// Aktion SaveSendeknopf
btnSendSave.addActionListener(new btnSendSaveListener());
//-----------Passwortprüfung----------------------------------------------------------------------------------
JLabel lblPasswortabfage = new JLabel("Save Chat Passwortabfrage");
lblPasswortabfage.setFont(new Font("Arial", Font.PLAIN, 12));
lblPasswortabfage.setBounds(502, 353, 185, 14);
frame.getContentPane().add(lblPasswortabfage);
txtField_Userschreibt = new JTextField();
txtField_Userschreibt.setBounds(502, 378, 113, 20);
frame.getContentPane().add(txtField_Userschreibt);
txtField_Userschreibt.setColumns(10);
JLabel lblUserPasswortabfrage = new JLabel("... schreibt, geben Sie das Passwort ein um zulesen");
lblUserPasswortabfrage.setBounds(502, 409, 211, 14);
frame.getContentPane().add(lblUserPasswortabfrage);
txtField_Passwortabfrage = new JTextField();
txtField_Passwortabfrage.setToolTipText("Geben Sie hier das Passwort ein, das Ihr Chatpartner Ihnen mitgeteilt hat");
txtField_Passwortabfrage.setBounds(564, 434, 149, 20);
frame.getContentPane().add(txtField_Passwortabfrage);
txtField_Passwortabfrage.setColumns(10);
btnPasswortprüfen = new JButton("Pruefen");
btnPasswortprüfen.setBackground(new Color(216, 191, 216));
btnPasswortprüfen.setFont(new Font("Arial", Font.PLAIN, 12));
btnPasswortprüfen.setToolTipText("Klicken Sie hier, damit Sie die Nachricht bekommen");
btnPasswortprüfen.setBounds(624, 465, 89, 23);
frame.getContentPane().add(btnPasswortprüfen);
// Aktion Passwortprüfen
btnPasswortprüfen.addActionListener(new btnPasswortprüfenListener());
//-------Frage ob Server kontakt besteht------------------------------------------------------------------------------------
if(!connectToServer())
{
// Connect-Label anzeigen ob verbunden oder nicht...
}
//-----Thread.....................................................................................................................
Thread t = new Thread(new MessagesFromServerListener());
t.start();
frame.getContentPane().add(scrollPane_Ausgabe);
frame.getContentPane().add(scrollPane_Eingabe);
frame.getContentPane().add(txtField_Chatname);
frame.getContentPane().add(txtField_Passworteingabe);
frame.getContentPane().add(txtField_Passwortabfrage);
frame.getContentPane().add(txtField_Userschreibt);
frame.getContentPane().add(btnChaten);
frame.getContentPane().add(btnSend);
frame.getContentPane().add(btnSendSave);
frame.getContentPane().add(btnPasswortprüfen);
}
}
//-------------ENDE-------------------------------------------------------------------------------------------------------
[/CODE]