import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.event.WindowAdapter; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Color; import java.awt.Event; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.TextArea; import java.awt.TextField; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JComponent; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.JScrollPane; import javax.swing.*; import javax.swing.text.*; /** * simple AWT gui for the chat client */ public class ChatGui extends JFrame implements ChatListener, ActionListener, WindowListener { private static final long serialVersionUID = 1L; protected TextArea outputTextbox; protected JTextField inputField; protected JTextField passwordField; protected JLabel passwordLabel; protected JButton sendButton; protected JTextPane textPane; protected JFrame passwordFrame; private Client chatClient; private StyledDocument doc; private Style style; protected Color currentColor; private String username; protected JPanel panel; protected JScrollPane scrollPane; /** * creates layout * * @param title * title of the window * @param chatClient * chatClient that is used for sending and receiving messages */ public ChatGui(String title, Client chatClient,String name) { super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); currentColor = Color.black; username = name; System.out.println("starting gui..."); setLayout(new BorderLayout()); addCom(); add("East",panel); add("Center", scrollPane); add("South", inputField); // register listener so that we are informed whenever a new chat message // is received (observer pattern) chatClient.addListener(this); pack(); this.setSize(400, 400); setVisible(true); inputField.requestFocus(); this.chatClient = chatClient; } void addCom() { textPane = new JTextPane(); textPane.setEditable(false); scrollPane = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); doc = (StyledDocument) textPane.getDocument(); // Create a style object and then set the style attributes style = doc.addStyle("StyleName", null); inputField = new JTextField(); inputField.addActionListener(this); panel = new JPanel(); panel.setLayout(new FlowLayout()); } /** * this method gets called every time a new message is received (observer * pattern) */ public void newChatLine(String sender,String line, Color color) { // Append to document String text = sender.concat(line); StyleConstants.setForeground(style, color); try { doc.insertString(doc.getLength(), text, style); } catch (Exception e) { } } public void windowClosing(WindowEvent e) { chatClient.stop(); setVisible(false); dispose(); System.exit(0); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } //@Override public void actionPerformed(ActionEvent e) { if ((e.getSource() == inputField)) { chatClient.send(username, inputField.getText(), currentColor); inputField.setText(""); } } }