package Chat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
public class ChatProgramm extends JPanel implements ActionListener
{
private JFrame controllingFrame, frame, online;
private JPanel combo, anmeldung, buttons, panel1, panel2;
private JPasswordField passwordField;
private JLabel comboLabel, passwordLabel, copyright, icon;
private JTextArea fenster, userOnline;
private JScrollPane fensterScroll;
private JTextField eingabe;
private JButton okButton, cancelButton, send, clear, close;
private JComboBox comboBox;
private ImageIcon picture = createImageIcon("extras/chat.gif");
private boolean isCorrect = false;
private Thread th;
private String user, onlineUser;
private String pw1, pw2, pw3, pw4, pw5;
public ChatProgramm()
{
/** create the comboLabel */
comboLabel = new JLabel("Name:");
comboLabel.setPreferredSize(new Dimension(58, 25));
/** create the comboBox */
String[] names = { "Commander", "Private Joker", "Private Paula",
"Private Schneewittchen", "Sexy Angel" };
comboBox = new JComboBox(names);
comboBox.setBackground(Color.WHITE);
comboBox.setSelectedIndex(0);
comboBox.setPreferredSize(new Dimension(160, 25));
/** create the passwordLabel */
passwordLabel = new JLabel("Passwort:");
passwordLabel.setPreferredSize(new Dimension(58, 25));
/** create the passwordField */
passwordField = new JPasswordField();
passwordField.setPreferredSize(new Dimension(160, 25));
passwordField.setActionCommand("ok");
passwordField.addActionListener(this);
/** create the ok button */
okButton = new JButton("OK");
okButton.setMnemonic(KeyEvent.VK_O);
okButton.setPreferredSize(new Dimension(96, 25));
okButton.setActionCommand("ok");
okButton.addActionListener(this);
/** create the cancel button */
cancelButton = new JButton("Abbrechen");
cancelButton.setMnemonic(KeyEvent.VK_A);
cancelButton.setPreferredSize(new Dimension(96, 25));
cancelButton.setActionCommand("cancel");
cancelButton.addActionListener(this);
/** create textArea */
fenster = new JTextArea();
fenster.setFont(new Font("Verdana", Font.PLAIN, 17));
fenster.setEditable(false);
/** create the scrollPane for the textArea */
fensterScroll = new JScrollPane(fenster);
fensterScroll.setBackground(Color.WHITE);
fensterScroll.setBorder(BorderFactory.createTitledBorder("Chat"));
fensterScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
fensterScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
/** create the textField */
eingabe = new JTextField();
eingabe.setActionCommand("send");
eingabe.setFont(new Font("Verdana", Font.PLAIN, 17));
eingabe.setPreferredSize(new Dimension(400, 27));
eingabe.addActionListener(this);
/** create the button send */
send = new JButton("Send");
send.setActionCommand("send");
send.setMnemonic(KeyEvent.VK_S);
send.addActionListener(this);
/** create the button clear */
clear = new JButton("Clear");
clear.setActionCommand("clear");
clear.addActionListener(this);
clear.setVisible(false);
/** create the button close */
close = new JButton("Close");
close.setActionCommand("close");
close.setMnemonic(KeyEvent.VK_C);
close.addActionListener(this);
/** create the copyright */
copyright = new JLabel("© 2008 by Simon Rummel");
copyright.setHorizontalTextPosition(JLabel.CENTER);
copyright.setForeground(Color.blue);
/** create the icon label */
icon = new JLabel();
icon.setIcon(picture);
/** create the user, who are online */
userOnline = new JTextArea();
userOnline.setForeground(Color.BLUE);
userOnline.setBorder(BorderFactory.createTitledBorder("User"));
userOnline.setFont(new Font("Verdana", Font.PLAIN, 17));
userOnline.setEditable(false);
/** refresh textArea and userOnline every second */
th = new Thread()
{
public void run()
{
while (!isInterrupted())
{
try
{
Thread.sleep(1000);
try
{
BufferedReader read = new BufferedReader(new FileReader(
"Chat/extras/Chat.txt"));
String zeile;
fenster.setText(read.readLine());
while ((zeile = read.readLine()) != null)
{
fenster.setText(fenster.getText() + "\n" + zeile);
fenster.setCaretPosition(fenster.getText().length());
}
read.close();
BufferedReader on = new BufferedReader(new FileReader(
"Chat/extras/User.txt"));
String wort;
userOnline.setText(on.readLine());
while ((wort = on.readLine()) != null)
{
userOnline.setText(userOnline.getText() + "\n" + wort);
}
on.close();
}
catch (FileNotFoundException err)
{
fenster.setText("Datei 'Chat.txt' oder 'User.txt' konnte nicht gefunden werden!");
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Lesen!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Lesen!");
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
};
th.start();
/** create the passwords */
pw1 = "?";
pw2 = "?";
pw3 = "?";
pw4 = "?";
pw5 = "?";
}
protected static Image Icon()
{
java.net.URL imgURL = ChatProgramm.class
.getResource("extras/chat_icon.gif");
if (imgURL != null)
{
return new ImageIcon(imgURL).getImage();
}
else
{
return null;
}
}
protected static ImageIcon createImageIcon(String path)
{
java.net.URL imgURL = ChatProgramm.class.getResource(path);
if (imgURL != null)
{
return new ImageIcon(imgURL);
}
else
{
System.err.println("Die Datei " + path + " wurde nicht gefunden!");
return null;
}
}
public void actionPerformed(ActionEvent e)
{
String cmd = e.getActionCommand();
if (cmd.equals("ok"))
{
String input = passwordField.getText();
Object name = comboBox.getSelectedItem();
if (name.equals("Commander") && pw1.equals(input))
{
controllingFrame.setVisible(false);
frame.setVisible(true);
/** add user to onlineList */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/User.txt", true));
write.write("Commander\n");
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
online.setVisible(true);
isCorrect = true;
user = "Commander";
onlineUser = "Commander";
}
if (name.equals("Private Joker") && pw2.equals(input))
{
controllingFrame.setVisible(false);
frame.setVisible(true);
/** add user to onlineList */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/User.txt", true));
write.write("Private Joker\n");
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
online.setVisible(true);
clear.setVisible(true);
isCorrect = true;
user = "Joker";
onlineUser = "Private Joker";
}
if (name.equals("Private Paula") && pw3.equals(input))
{
controllingFrame.setVisible(false);
frame.setVisible(true);
/** add user to onlineList */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/User.txt", true));
write.write("Private Paula\n");
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
online.setVisible(true);
isCorrect = true;
user = "Paula";
onlineUser= "Private Paula";
}
if (name.equals("Private Schneewittchen") && pw4.equals(input))
{
controllingFrame.setVisible(false);
frame.setVisible(true);
/** add user to onlineList */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/User.txt", true));
write.write("Private Schneewittchen\n");
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
online.setVisible(true);
isCorrect = true;
user = "Schneewittchen";
onlineUser = "Private Schneewittchen";
}
if (name.equals("Sexy Angel") && pw5.equals(input))
{
controllingFrame.setVisible(false);
frame.setVisible(true);
/** add user to onlineList */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/User.txt", true));
write.write("Sexy Angel\n");
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
online.setVisible(true);
isCorrect = true;
user = "Sexy Angel";
onlineUser = "Sexy Angel";
}
else if (isCorrect == false)
{
JOptionPane.showMessageDialog(controllingFrame, "Falsches Passwort!",
"Fehlermeldung", JOptionPane.ERROR_MESSAGE);
passwordField.setText("");
}
}
if ("cancel".equals(cmd))
{
System.exit(0);
}
if (e.getActionCommand().equals("send"))
{
th.suspend();
Date date = new Date();
DateFormat df = DateFormat.getTimeInstance(DateFormat.MEDIUM);
/** write */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/Chat.txt", true));
write.write(user + " (" + df.format(date) + "): " + eingabe.getText());
write.newLine();
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
eingabe.setText("");
eingabe.requestFocus();
th.resume();
}
if (e.getActionCommand().equals("clear"))
{
/** write */
try
{
BufferedWriter write = new BufferedWriter(new FileWriter(
"Chat/extras/Chat.txt", false));
write.write("");
write.close();
}
catch (IOException err)
{
fenster.setText("Es gab einen IO-Fehler beim Schreiben!");
}
catch (Exception err)
{
fenster.setText("Es gab einen Fehler beim Schreiben!");
}
}
if (e.getActionCommand().equals("close"))
{
try {
BufferedReader read = new BufferedReader(new FileReader(
"Chat/extras/User.txt"));
String zeile;
int counter = 0;
String matrix[] = new String[5];
for (int j = 0; (zeile = read.readLine()) != null; j++) {
if (zeile.trim().length() == 0) {
continue;
}
matrix[j] = zeile;
counter++;
}
read.close();
/** search the above customer in the file */
try {
BufferedWriter out = new BufferedWriter(new FileWriter(
"Chat/extras/User.txt", false));
for (int del = 0; del < counter; del++) {
if (matrix[del].equals(onlineUser)) {
del++;
}
if (del < counter)
{
out.write(matrix[del]);
out.newLine();
}
}
out.close();
} catch (IOException err) {
System.err.println("\nEs gab einen IO-Fehler! XD\n");
err.printStackTrace();
System.exit(8);
} catch (Exception err) {
System.err.println("\nEs gab einen Fehler! XD\n");
err.printStackTrace();
System.exit(9);
}
} catch (FileNotFoundException err) {
System.err
.println("\nDatei 'User.txt' nicht vorhanden! XD\n");
System.exit(1);
} catch (IOException err) {
System.err.println("\nEs gab einen IO-Fehler! XD\n");
err.printStackTrace();
System.exit(8);
} catch (Exception err) {
System.err.println("\nEs gab einen Fehler! XD\n");
err.printStackTrace();
System.exit(9);
}
System.exit(0);
}
}
public void Fenster()
{
/** create the window */
combo = new JPanel();
combo.setBackground(Color.WHITE);
combo.setLayout(new FlowLayout());
combo.add(comboLabel);
combo.add(comboBox);
anmeldung = new JPanel();
anmeldung.setBackground(Color.WHITE);
anmeldung.setLayout(new FlowLayout());
anmeldung.add(passwordLabel);
anmeldung.add(passwordField);
buttons = new JPanel();
buttons.setBackground(Color.WHITE);
buttons.setLayout(new FlowLayout());
buttons.add(okButton);
buttons.add(cancelButton);
controllingFrame = new JFrame("Anmeldung");
controllingFrame.setIconImage(Icon());
controllingFrame.setPreferredSize(new Dimension(250, 140));
controllingFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
controllingFrame.setLayout(new BorderLayout());
controllingFrame.add(combo, BorderLayout.NORTH);
controllingFrame.add(anmeldung, BorderLayout.CENTER);
controllingFrame.add(buttons, BorderLayout.SOUTH);
controllingFrame.setResizable(false);
controllingFrame.setVisible(true);
controllingFrame.pack();
panel1 = new JPanel();
panel1.setBackground(Color.WHITE);
panel1.setLayout(new FlowLayout());
panel1.add(eingabe);
panel1.add(send);
panel1.add(close);
panel2 = new JPanel();
panel2.setBackground(Color.WHITE);
panel2.setLayout(new FlowLayout());
panel2.add(copyright);
panel2.add(icon);
panel2.add(clear);
frame = new JFrame("TAC - TextAreaChat");
frame.setPreferredSize(new Dimension(600, 400));
frame.setIconImage(Icon());
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(panel1, BorderLayout.NORTH);
frame.add(fensterScroll, BorderLayout.CENTER);
frame.add(panel2, BorderLayout.SOUTH);
frame.setVisible(false);
frame.pack();
online = new JFrame("Online");
online.setPreferredSize(new Dimension(250, 180));
online.setIconImage(Icon());
online.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
online.add(userOnline);
online.setVisible(false);
online.pack();
}
public static void main(String[] args)
{
/** creating and showing this GUI */
JFrame.setDefaultLookAndFeelDecorated(true);
ChatProgramm start = new ChatProgramm();
start.Fenster();
}
}