1+ import java.io.*;
2+ import java.net.*;
3+ import java.util.Date;
4+ import javafx.application.Application;
5+ import javafx.geometry.Pos;
6+ import javafx.scene.Scene;
7+ import javafx.scene.control.Button;
8+ import javafx.scene.control.Label;
9+ import javafx.scene.control.TextArea;
10+ import javafx.scene.control.TextField;
11+ import javafx.scene.control.Label;
12+ import javafx.scene.control.ScrollPane;
13+ import javafx.scene.layout.GridPane;
14+ import javafx.scene.layout.BorderPane;
15+ import javafx.stage.Stage;
16+
17+ public class Exercise31_02Client extends Application {
18+ // IO streams
19+ DataOutputStream toServer = null;
20+ DataInputStream fromServer = null;
21+
22+ // Text fields for BMI information
23+ private TextField tfWeight = new TextField();
24+ private TextField tfHeight = new TextField();
25+
26+ @Override // Override the start method in the Application class
27+ public void start(Stage primaryStage) {
28+ // Main pane
29+ BorderPane pane = new BorderPane();
30+
31+ // Set text field alignment right
32+ tfWeight.setAlignment(Pos.BASELINE_RIGHT);
33+ tfHeight.setAlignment(Pos.BASELINE_RIGHT);
34+
35+ // Create button to send BMI info to server
36+ Button btSubmit = new Button("Submit");
37+
38+ // Pane to hold BMI information and submit button
39+ GridPane paneForBmiInfo = new GridPane();
40+ paneForBmiInfo.add(new Label("Weight in pounds"), 0, 0);
41+ paneForBmiInfo.add(tfWeight, 1, 0);
42+ paneForBmiInfo.add(new Label("Height in inches"), 0, 1);
43+ paneForBmiInfo.add(tfHeight, 1, 1);
44+ paneForBmiInfo.add(btSubmit, 2, 1);
45+
46+ // Text Area to display contents
47+ TextArea ta = new TextArea();
48+ pane.setTop(paneForBmiInfo);
49+ pane.setCenter(new ScrollPane(ta));
50+
51+ // Create a scene and place it in the stage
52+ Scene scene = new Scene(pane, 400, 200);
53+ primaryStage.setTitle("Exercise31_01Client"); // Set the stage title
54+ primaryStage.setScene(scene); // Place the scene in the stage
55+ primaryStage.show(); // Display the stage
56+
57+ btSubmit.setOnAction(e -> {
58+ try {
59+ // Get the weight and height from the text fields
60+ double weight = Double.parseDouble(tfWeight.getText().trim());
61+ double height = Double.parseDouble(tfHeight.getText().trim());
62+
63+ // Send the BMI information to the server
64+ toServer.writeDouble(weight);
65+ toServer.writeDouble(height);
66+ toServer.flush();
67+
68+ // Get string from the server
69+ String bmi = fromServer.readUTF();
70+
71+ // Display to text area
72+ ta.appendText("Weight: " + weight + '\n');
73+ ta.appendText("Height: " + height + '\n');
74+ ta.appendText(bmi + '\n');
75+ }
76+ catch (IOException ex) {
77+ System.err.println(ex);
78+ }
79+ });
80+
81+ try {
82+ // Create a socket to connect to the server
83+ Socket socket = new Socket("localhost", 8000);
84+
85+ // Create an input stream to receive data from the server
86+ fromServer = new DataInputStream(socket.getInputStream());
87+
88+ // Create an output stream to send data to the server
89+ toServer = new DataOutputStream(socket.getOutputStream());
90+ }
91+ catch (IOException ex) {
92+ ta.appendText(ex.toString() + '\n');
93+ }
94+ }
95+ }