Advertisement
Guest User

SoapClient

a guest
Apr 22nd, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.21 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.PrintWriter;
  9. import java.net.Socket;
  10.  
  11. import javafx.application.Application;
  12. import javafx.geometry.Insets;
  13. import javafx.scene.Scene;
  14. import javafx.scene.control.Button;
  15. import javafx.scene.control.Label;
  16. import javafx.scene.control.ScrollPane;
  17. import javafx.scene.control.TextArea;
  18. import javafx.scene.control.TextField;
  19. import javafx.scene.control.ScrollPane.ScrollBarPolicy;
  20. import javafx.scene.image.Image;
  21. import javafx.scene.image.ImageView;
  22. import javafx.scene.layout.Background;
  23. import javafx.scene.layout.BackgroundFill;
  24. import javafx.scene.layout.BorderPane;
  25. import javafx.scene.paint.Color;
  26. import javafx.stage.Stage;
  27.  
  28. public class SoapClient extends Application {
  29.  
  30. Button connectButton = new Button("Connect");
  31. Button sendButton = new Button("Send >>>");
  32. TextField userEntry = new TextField();
  33. TextField serverEntry = new TextField();
  34. static TextArea chatLog = new TextArea();
  35. TextArea chat = new TextArea();
  36.  
  37. int serverSocket = 8000;
  38. ClientHandler runClient = new ClientHandler(serverSocket);
  39.  
  40.  
  41. public static void main(String[] args) {
  42. Application.launch(args);
  43. }
  44.  
  45. @Override
  46. public void start(Stage primaryStage) {
  47.  
  48.  
  49. Image companyIcon = null;
  50. try {
  51. companyIcon = new Image(new FileInputStream("E:\\SoapBox\\src\\CompanyIcon.png"));
  52. } catch (FileNotFoundException e) {
  53. e.printStackTrace();
  54. }
  55. primaryStage.getIcons().add(companyIcon);
  56. BorderPane clientWindow = new BorderPane();
  57.  
  58.  
  59. //Top area of client window used to connect to server
  60. BorderPane connectArea = new BorderPane();
  61.  
  62. //connectArea settings
  63.  
  64. connectArea.setBackground(new Background(new BackgroundFill(Color.CORNFLOWERBLUE, null, null)));
  65. connectArea.setMinSize(600, 150);
  66.  
  67. connectButton.setBackground(new Background(new BackgroundFill(Color.WHITESMOKE, null, null)));
  68. connectButton.setMinSize(100, 80);
  69. connectButton.setStyle("-fx-font-size: 14;");
  70. connectArea.setMargin(connectButton, new Insets(35,20,0,0));
  71.  
  72. //input area for username and server
  73. BorderPane entryFields = new BorderPane();
  74.  
  75. userEntry.setMinSize(80, 30);
  76. connectArea.setMargin(entryFields,new Insets(20,20,20,0));
  77. serverEntry.setMinSize(80, 30);
  78. entryFields.setPadding(new Insets(10));
  79. entryFields.setTop(userEntry);
  80. entryFields.setBottom(serverEntry);
  81.  
  82. //labels for connect area
  83. BorderPane entryLabels = new BorderPane();
  84. Label user = new Label("Username: ");
  85. user.setStyle("-fx-font-size: 18;" + "-fx-font-weight: bold;");
  86. Label server = new Label("Server: ");
  87. server.setStyle("-fx-font-size: 18;" + "-fx-font-weight: bold;");
  88. connectArea.setMargin(entryLabels, new Insets(20,0,20,20));
  89. user.setMinSize(100, 50);
  90. server.setMinSize(100, 50);
  91. entryLabels.setTop(user);
  92. entryLabels.setBottom(server);
  93.  
  94. connectArea.setRight(connectButton);
  95. connectArea.setCenter(entryFields);
  96. connectArea.setLeft(entryLabels);
  97.  
  98.  
  99.  
  100. clientWindow.setTop(connectArea);
  101.  
  102. //Middle area of client used to view messages from other user clients
  103.  
  104. chatLog.setMinSize(620, 510);
  105. chatLog.setEditable(false);
  106. chatLog.setWrapText(true);
  107. ScrollPane chatViewer = new ScrollPane(chatLog);
  108. chatViewer.setMinSize(600, 500);
  109. chatViewer.setHbarPolicy(ScrollBarPolicy.NEVER);
  110. clientWindow.setCenter(chatViewer);
  111.  
  112. //Bottom area of client window used to enter and send chat messages
  113. BorderPane chatArea = new BorderPane();
  114.  
  115. //chatArea settings
  116.  
  117. chatArea.setBackground(new Background(new BackgroundFill(Color.CORNFLOWERBLUE, null, null)));
  118. chatArea.setMinSize(600, 150);
  119. chat.setWrapText(true);
  120.  
  121. sendButton.setStyle("-fx-font-size: 14;");
  122. sendButton.setDefaultButton(true);
  123. sendButton.setMinSize(120, 50);
  124. ScrollPane chatEnter = new ScrollPane(chat);
  125. chatEnter.setHbarPolicy(ScrollBarPolicy.NEVER);
  126. chatEnter.setMaxSize(500,100);
  127. chatArea.setMargin(chatEnter, new Insets(10,0,0,10));
  128. chatArea.setMargin(sendButton, new Insets(10,10,0,0));
  129. chatArea.setLeft(chatEnter);
  130. chatArea.setRight(sendButton);
  131. Image companyLogo = null;
  132. try {
  133. companyLogo = new Image(new FileInputStream("E:\\SoapBox\\src\\ProjectLogo.png"));
  134. } catch (FileNotFoundException e) {
  135. e.printStackTrace();
  136. }
  137.  
  138. chatArea.setBottom(new ImageView(companyLogo));
  139. clientWindow.setBottom(chatArea);
  140.  
  141. //clientWindow settings
  142.  
  143. clientWindow.setMinSize(600,800);
  144.  
  145. //Event handling code
  146.  
  147. //send handler
  148. sendButton.setOnAction( e-> {
  149. runClient.sendToServer(userEntry.getText() + ": " + chat.getText());
  150. chat.clear();
  151. });
  152.  
  153. //connect handler
  154.  
  155. //takes serverEntry and uses that to choose server to connect to, and saves username entered to be sent to server
  156. connectButton.setOnAction( e-> {
  157. connectToServer();
  158. buttonUpdate();
  159. });
  160.  
  161.  
  162. Scene scene = new Scene(clientWindow);
  163. primaryStage.setResizable(false);
  164. primaryStage.setTitle("SoapBox"); // Set the stage title
  165. primaryStage.setScene(scene); // Place the scene in the stage
  166. primaryStage.show(); // Display the stage
  167. primaryStage.setOnCloseRequest( e -> {
  168. runClient.closeConnection();
  169. });
  170. }
  171.  
  172. //connects to server and sets port#
  173. private void connectToServer() {
  174. serverSocket = Integer.parseInt(serverEntry.getText());
  175. new Thread(runClient).start();
  176. }
  177.  
  178. //access method to update chatlog
  179. public static void updateChat(String message) {
  180. chatLog.appendText(message);
  181. System.out.println(message);
  182. System.out.println("message");
  183. }
  184.  
  185. public void buttonUpdate() {
  186. Button defaultButton = connectButton;
  187.  
  188. //changes button settings to be more interactive
  189. connectButton.setText("Connected");
  190. connectButton.setBackground(new Background(new BackgroundFill(Color.LIGHTGREEN, null, null)));
  191. connectButton.setOnMouseEntered( e-> {
  192. connectButton.setText("Disconnect");
  193. connectButton.setBackground(new Background(new BackgroundFill(Color.RED, null, null)));
  194. });
  195. connectButton.setOnMouseExited( e-> {
  196. connectButton.setText("Connected");
  197. connectButton.setBackground(new Background(new BackgroundFill(Color.LIGHTGREEN, null, null)));
  198. });
  199.  
  200. //Restores button to default functionality
  201. connectButton.setOnAction( e-> {
  202.  
  203. //clears username and server fields
  204. userEntry.clear();
  205. serverEntry.clear();
  206.  
  207. //closes connection and sets button to default settings
  208. runClient.closeConnection();
  209. connectButton.setText("Connect");
  210. connectButton.setBackground(new Background(new BackgroundFill(Color.WHITESMOKE, null, null)));
  211.  
  212. connectButton.setOnMouseEntered(null);
  213. connectButton.setOnMouseExited(null);
  214. connectButton.setOnAction( h-> {
  215. serverSocket = Integer.parseInt(serverEntry.getText());
  216. new Thread(runClient).start();
  217. });
  218.  
  219. });
  220.  
  221. }
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement