/src/elements/ChatComponent.java

http://inequity.googlecode.com/ · Java · 120 lines · 80 code · 17 blank · 23 comment · 1 complexity · 98f5f5fce0ea39bef5eed85833b9d078 MD5 · raw file

  1. package elements;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import javax.swing.Box;
  5. import javax.swing.JButton;
  6. import javax.swing.JPanel;
  7. import javax.swing.JScrollPane;
  8. import javax.swing.JTextArea;
  9. import javax.swing.JTextField;
  10. import javax.swing.SwingUtilities;
  11. import network.ClientController;
  12. import packets.ChatReq;
  13. /**
  14. * A chat widget in the form of a JPanel
  15. * @author Joel Garboden
  16. */
  17. public class ChatComponent extends JPanel
  18. {
  19. private ClientController controller;
  20. private JTextArea chatLog;
  21. private JScrollPane chatPane;
  22. private JTextField message;
  23. private JButton send;
  24. /**
  25. * Constructor<br/>
  26. * Initiates the chat component and links to it's controller
  27. * @param controller client's controller
  28. * @param size preferred size of the chat widget
  29. */
  30. public ChatComponent(ClientController controller, Dimension size)
  31. {
  32. this.controller = controller;
  33. setPreferredSize(size);
  34. setLayout(new BorderLayout());
  35. chatLog = new JTextArea();
  36. chatPane = new JScrollPane(chatLog);
  37. chatLog.setEditable(false);
  38. message = new JTextField(Consts.DEFAULT_CHAT_PROMPT);
  39. message.setMaximumSize(new Dimension(2000, 20));
  40. message.setEditable(false);
  41. send = new JButton("Send");
  42. send.setEnabled(false);
  43. Box messagingBox = Box.createHorizontalBox();
  44. add(chatPane, BorderLayout.CENTER);
  45. messagingBox.add(message);
  46. messagingBox.add(send);
  47. add(messagingBox, BorderLayout.SOUTH);
  48. TextSelector.install();
  49. send.addActionListener(new java.awt.event.ActionListener()
  50. {
  51. public void actionPerformed(java.awt.event.ActionEvent evt)
  52. {
  53. sendActionPerformed(evt);
  54. }
  55. });
  56. message.addActionListener(new java.awt.event.ActionListener()
  57. {
  58. public void actionPerformed(java.awt.event.ActionEvent evt)
  59. {
  60. sendActionPerformed(evt);
  61. }
  62. });
  63. setEnabled(false);
  64. }
  65. /**
  66. * Action method for the sending of a chat message
  67. * @param evt (unused) required for ActionListener
  68. */
  69. private void sendActionPerformed(java.awt.event.ActionEvent evt)
  70. {
  71. if(!message.getText().equals(""))
  72. {
  73. controller.sendRequest(new ChatReq(controller.playerName, message.getText()));
  74. message.setText("");
  75. SwingUtilities.invokeLater(new Runnable()
  76. {
  77. public void run()
  78. {
  79. chatLog.setCaretPosition(chatLog.getText().length());
  80. }
  81. });
  82. }
  83. }
  84. /**
  85. * Posts a formatted chat message to the chat log
  86. * @param name posting player's name (or System)
  87. * @param chatMsg the message to be displayed
  88. */
  89. public void postChat(String name, String chatMsg)
  90. {
  91. chatLog.append('\n' + name + ": " + chatMsg);
  92. }
  93. /**
  94. * Toggles the enabling of chat
  95. * @param enabled whether chat is enabled or not
  96. */
  97. public void enableChat(boolean enabled)
  98. {
  99. message.setEditable(enabled);
  100. send.setEnabled(enabled);
  101. setEnabled(enabled);
  102. }
  103. }