import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
class ChatPanel extends JPanel implements ActionListener, WindowListener {
JButton button; //send Button
JTextField eingabe; //Eingabefeld
JTextArea Textarea; //Textarea Ausgabefeld
JTextArea Benutzerarea;
PrintWriter output = null;
JScrollPane scroll; //Scrollbar
JScrollPane BenutzerScroll;
JButton byeButton;
ArrayList nicknames = new ArrayList(10);
public void windowOpened(WindowEvent e) {} //dann das programm schliesst, wenn man das fenster zumacht
public void windowClosing(WindowEvent e) {
output.println("bye");
try {
Thread.currentThread().sleep(0);
}
catch (InterruptedException ex) {}
}
public void windowClosed(WindowEvent e) {System.exit(0);}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public ChatPanel() {
Textarea = new JTextArea(" Willkommen im Chat\n\n", 30, 50); //texrarea erzeugung
Benutzerarea = new JTextArea(" Momentan im Chat sind:\n\n",30,15); //Benuterfenster
eingabe = new JTextField("", 59); //eingabefeld erzeugung mit länge
button = new JButton("Send"); //button erzeigung
scroll = new JScrollPane(Textarea); //scrollbarerzeugung
BenutzerScroll= new JScrollPane(Benutzerarea);
byeButton = new JButton("Abmelden");
Textarea.setBackground(new Color(207,228,245));
eingabe.setBackground(new Color(207,228,245));
Textarea.setForeground(new Color(125,30,60));
eingabe.setForeground(new Color(125,30,60));
Benutzerarea.setBackground(new Color(207,228,245));
Benutzerarea.setForeground(new Color(125,30,60));
add(scroll);
//scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //versteckt die untere scrollbar
Benutzerarea.setEditable(false); //
add(BenutzerScroll); //benutzerarea(mit scrollbar)hinzufügen
BenutzerScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //versteckt die untere scrollbar
add(eingabe); //eingabefeld hinzufügen
add(button);
add(byeButton); //button hinzufügen
Textarea.setEditable(false); //textarea text ist nicht bearbeitbar
button.addActionListener(this); //schaut ob button betätigt wurde
eingabe.addActionListener(this); //schaut ob entertaste betätigt wurde
byeButton.addActionListener(this);
}
void setOutput(Socket client) {
try {
output = new PrintWriter(client.getOutputStream(), true);
}
catch (IOException e) {}
}
void appendMessage(String s,String benutzer) {
Textarea.append(" "+s + "\n");
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());//schaut dass die scrollbar unten bleibt
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button||e.getSource() == eingabe) { //get source schaut ob der action listener aktiviert wurde
output.println(eingabe.getText()); //schreibt den eigenen text in text area
eingabe.setText(""); //leert das eingabefeld
}
else if(e.getSource()== byeButton){
output.println("bye");
}
}
}
class Receiver extends Thread { //empfänger
BufferedReader reader = null; //fasst den text in teilen zusammen
ChatPanel panel = null;
public Receiver(BufferedReader r, ChatPanel c) {
reader = r;
panel = c;
}
public void run() {
try {
String s = "";
while (s != null) {
s = reader.readLine();
if (s!= null && s.endsWith("thfjhgdh")) {
s=s.substring(0,(s.indexOf("thfjhgdh")));
panel.nicknames.add(s);
panel.Benutzerarea.append(s + "\n");
}
else if(s!= null){panel.appendMessage(s,null);
if (s.endsWith(" hat den Chat betreten!")){
String newNickname = s.substring(0,(s.indexOf(" hat den Chat betreten!")));
panel.nicknames.add(newNickname);
panel.Benutzerarea.setText(" Momentan im Chat sind:\n\n");
int i = 0;
while (i < panel.nicknames.size()) {
panel.Benutzerarea.append((String) " "+panel.nicknames.get(i) + "\n");
i++;
}
}
if (s.endsWith(" hat den Chat verlassen!")){
String newNickname = s.substring(0,(s.indexOf(" hat den Chat verlassen!")));
panel.nicknames.remove(newNickname);
panel.Benutzerarea.setText(" Momentan im Chat sind:\n\n");
int i = 0;
while (i < panel.nicknames.size()) {
panel.Benutzerarea.append((String) panel.nicknames.get(i) + "\n");
i++;
}
}
}
else if(s==null){
panel.appendMessage("",null);
this.sleep(2000);
System.exit(0);
}
else{panel.appendMessage("",null);}
}
}
catch (IOException e) {}
catch(InterruptedException ex){}
}
}
public class ChatMessengerWin {
public static void main (String args[]) {
ChatPanel panel = new ChatPanel(); //erzeugt fensterfläche
JFrame window = new JFrame(" CHAT MESSENGER"); //fenster rahmen
window.addWindowListener(panel);
window.add(panel);
window.setPreferredSize(new Dimension(800, 590)); //fenstergrösse
window.pack(); //verbindet fläche mit rahmen des fensters
window.setResizable(false); //fenstergrösse nicht anpassbar
panel.setBackground(new Color(91,91,245)); //rot gruen blau zw 0 und 255 rgb werte
//schriftfarbe: variabel.setForeground(new(,,))
window.setVisible(true); //fenster anzeigen
Socket client = null;
try {
client = new Socket("192.168.123.195", 5555); //socket erstellen (IP , port)
Receiver r = new Receiver(new BufferedReader(new InputStreamReader( //empfänger, der vom server die buchstaben direckt in zeilen zusammenfasst
client.getInputStream())), panel);
panel.setOutput(client);
r.start(); //thread receiver starten
}
catch (IOException e) {
System.out.println("Fehler bei der Verbindung"); // system.out heisst, dass diese nachricht in der konsole ausgegeben würde
}
}
}