package gui;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
/**
* Klasse: Die Klasse UserInterfaceClient stellt das GUI, bzw. das Interface
* fuer den Client dar, in welchem dieser dann das Chatprogramm zu sehen
* bekommt.
*/
public class UserInterfaceClient extends JFrame {
/**
* Attribut: Eine statische, unveraenderbare Variable des Typs long wird
* deklariert und initialisiert.
*/
private static final long serialVersionUID = -9142707690379587523L;
/**
* Attribut: Ein JButton wird deklariert und initialisiert, mit welchem
* spaeter der eingegebene Text abgeschickt wird.
*/
private JButton send = new JButton("Senden");
/**
* Attribut: Ein JTextField wird deklariert und initialisiert, in welchem
* spaeter der Text eingegeben wird, welchen der Benutzer an seinen
* Chatpartner uebermitteln moechte.
*/
private JTextArea in = new JTextArea(3, 20);
/**
* Attribut: Ein JTextArea wird deklariert und initialisiert, in welchem
* spaeter der geschriebene und gesendete Text angezeigt wird.
*/
private JTextArea out = new JTextArea(15, 20);
/**
* Attribut: Ein JTextArea wird deklariert und initialisiert, in welchem die
* am Chat teilnehmenden Benutzer angezeigt werden.
*/
// private JTextArea user = new JTextArea();
private JMenu settings = new JMenu("Einstellungen");
private JMenuItem font = new JMenuItem("Schrift");
private JMenu autoscroll = new JMenu("Autoscroll ein/aus");
private JMenuItem ein = new JMenuItem("Ein");
private JMenuItem aus = new JMenuItem("Aus");
private JMenuBar menue = new JMenuBar();
private JMenu datei = new JMenu("Datei");
private JMenuItem saveChronic = new JMenuItem("Verlauf speichern");
private JMenuItem exit = new JMenuItem("Beenden");
private JScrollPane outscrollpane = new JScrollPane(out);
private JScrollPane inscrollpane = new JScrollPane(in);
private JLabel loggedAs = new JLabel("Angemeldet als: ");
private JLabel logged = new JLabel("Kommt noch!");
private JLabel ipServer = new JLabel("IP des Servers: ");
private JLabel ip = new JLabel("Kommt noch!");
private JPanel data = new JPanel();
/**
* Methode: In dieser Methode wird das GUI erstellt, in welchem spaeter der
* Benutzer das Chatprogramm zu sehen bekommt.
*/
public UserInterfaceClient() {
super("Cool Version 1.0");
actionHandler();
this.setLayout(new FlowLayout());
this.setSize(300, 450);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
out.setEditable(false);
outscrollpane
.setVerticalScrollBarPolicy(ScrollPaneConstants
.VERTICAL_SCROLLBAR_ALWAYS);
outscrollpane
.setHorizontalScrollBarPolicy(ScrollPaneConstants
.HORIZONTAL_SCROLLBAR_NEVER);
inscrollpane
.setVerticalScrollBarPolicy(ScrollPaneConstants
.VERTICAL_SCROLLBAR_ALWAYS);
inscrollpane
.setHorizontalScrollBarPolicy(ScrollPaneConstants
.HORIZONTAL_SCROLLBAR_NEVER);
out.setLineWrap(true);
in.setLineWrap(true);
data.setLayout(new GridLayout(2, 2));
menue.add(datei);
datei.add(saveChronic);
datei.add(new JSeparator());
datei.add(exit);
menue.add(settings);
settings.add(font);
settings.add(autoscroll);
autoscroll.add(ein);
autoscroll.add(aus);
this.setJMenuBar(menue);
// Hinzufuegen der Attribute zum Frame
data.add(loggedAs);
data.add(logged);
data.add(ipServer);
data.add(ip);
this.add(data);
this.add(outscrollpane);
this.add(inscrollpane);
this.add(send);
}
/**
* Methode: Diese Methode implementiert den ActionListener fuer den JButton.
*/
private void actionHandler() {
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
/*
* Noch falscher Ansatz. Hier muss man den Text an den Server
* uebermitteln. Der Server uebermittelt dann den Text wieder an
* den Client. Vorerst lasse ich das noch ueber die getText()
* und setText() Methoden, bis ich die Netzwerkprogrammierung
* vollkommen verstanden habe
*/
if (!in.getText().isEmpty()) {
out.setText(out.getText() + in.getText() + "\n");
in.setText("");
} else {
JOptionPane.showMessageDialog(in, "Text eingeben!");
}
}
});
in.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER && e.isControlDown()) {
if (!in.getText().isEmpty()) {
out.setText(out.getText() + in.getText() + "\n");
in.setText("");
} else {
JOptionPane.showMessageDialog(in, "Text eingeben!");
}
}
}
});
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.exit(0);
}
});
saveChronic.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("Verlauf wird gespeichert!");
}
});
}
}