/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

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