/src/ChatAppGUI/ChatWindow.java
Java | 99 lines | 75 code | 12 blank | 12 comment | 8 complexity | 573b4a150c953ebb959ffcf1de73eafe MD5 | raw file
1package ChatAppGUI;
2import java.awt.*;
3import java.awt.event.*;
4
5import javax.swing.*;
6
7import ChatApp.Event;
8import ChatApp.User;
9
10/**
11 * Shows the current dialog between the user and a contact.
12 * This class uses the Decorator pattern, where the JScrollPane
13 * is the Decorator for the JList (Concrete Component)
14 */
15public class ChatWindow extends CWindow {
16 /**
17 * Constructs a new ChatWindow
18 * @param user
19 * @param controller
20 */
21 public ChatWindow(final User user, final GUIController controller) {
22 this.user = user;
23 this.controller = controller;
24 reverse = false;
25 repaint();
26 }
27
28 @Override
29 public void repaint() {
30 frame = new JFrame();
31
32 //create components
33 messageField = new JTextField(50);
34 messageList = new JList<String>(user.getCurrentMessages());
35 sendMessageButton = new JButton("Send Message");
36 historySortButton = new JButton("Sort Messages");
37
38 //add action listeners
39 sendMessageButton.addActionListener(new ActionListener() {
40 @Override
41 public void actionPerformed(ActionEvent e) {
42 if (messageField.getText().isEmpty()) {
43 JOptionPane.showMessageDialog(frame, "No message entered!");
44 } else {
45 user.sendMessage(messageField.getText());
46 }
47 }
48 });
49
50 historySortButton.addActionListener(new ActionListener() {
51 @Override
52 public void actionPerformed(ActionEvent e) {
53 if (user.getCurrentMessages().length == 0) {
54 JOptionPane.showMessageDialog(frame, "No messages available to sort!");
55 } else {
56 if(reverse == true) {
57 reverse = false;
58 } else {
59 reverse = true;
60 }
61 user.sortMessages(reverse);
62 }
63 }
64 });
65
66 messagePane = new JScrollPane(messageList);
67 messagePane.setPreferredSize(new Dimension(600,200));
68
69 buttonPanel = new JPanel();
70 buttonPanel.setLayout(new GridLayout(1,2));
71
72 buttonPanel.add(sendMessageButton);
73 buttonPanel.add(historySortButton);
74
75 frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
76 frame.add(messagePane);
77 frame.add(messageField);
78 frame.add(buttonPanel);
79 frame.pack();
80 frame.addWindowListener(new WindowAdapter() {
81 public void windowClosing(WindowEvent e) {
82 user.endChatSession();
83 controller.update(null, Event.WINDOW_CLOSED);
84 }
85 });
86 frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
87 frame.setVisible(true);
88 }
89
90 private JPanel buttonPanel;
91 private JScrollPane messagePane;
92 private JTextField messageField;
93 private JList<String> messageList;
94 private JButton sendMessageButton;
95 private JButton historySortButton;
96 private User user;
97 private GUIController controller;
98 private boolean reverse;
99}