PageRenderTime 31ms CodeModel.GetById 22ms app.highlight 8ms RepoModel.GetById 0ms app.codeStats 0ms

/src/ChatAppGUI/ChatWindow.java

https://bitbucket.org/blitz2145/cop4331-chat-application
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}