Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

This is a java question and the GUI must be done using JavaFX. Please don\'t not

ID: 3665905 • Letter: T

Question

This is a java question and the GUI must be done using JavaFX. Please don't not use java awt. The question comes form intro to java by liang.

I have posted an example, finding a radius of a circle client/server. All you have to do is add and change a few lines to incorporated the BMI.

Here is the example:

Client.java

import java.io.*;
import java.net.*;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Client extends Application {

    // IO streams

    DataOutputStream toServer = null;
    DataInputStream fromServer = null;

    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        // Panel p to hold the label and text field
        BorderPane paneForTextField = new BorderPane();
        paneForTextField.setPadding(new Insets(5, 5, 5, 5));
        paneForTextField.setStyle("-fx-border-color: green");
        paneForTextField.setLeft(new Label("Enter a radius: "));

        TextField tf = new TextField();
        tf.setAlignment(Pos.BOTTOM_RIGHT);
        paneForTextField.setCenter(tf);

        BorderPane mainPane = new BorderPane();
        // Text area to display contents
        TextArea ta = new TextArea();
        mainPane.setCenter(new ScrollPane(ta));
        mainPane.setTop(paneForTextField);

        // Create a scene and place it in the stage
        Scene scene = new Scene(mainPane, 450, 200);
        primaryStage.setTitle("Client"); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage

        tf.setOnAction(e -> {
            try {
                // Get the radius from the text field
                double radius = Double.parseDouble(tf.getText().trim());

                // Send the radius to the server
                toServer.writeDouble(radius);
                toServer.flush();

                // Get area from the server
                double area = fromServer.readDouble();

                // Display to the text area
                ta.appendText("Radius is " + radius + " ");
                ta.appendText("Area received from the server is "
                        + area + ' ');
            } catch (IOException ex) {
                System.err.println(ex);
            }
        });

        try {
            // Create a socket to connect to the server
            Socket socket = new Socket("localhost", 8000);
      // Socket socket = new Socket("130.254.204.36", 8000);
            // Socket socket = new Socket("drake.Armstrong.edu", 8000);

            // Create an input stream to receive data from the server
            fromServer = new DataInputStream(socket.getInputStream());

            // Create an output stream to send data to the server
            toServer = new DataOutputStream(socket.getOutputStream());
        } catch (IOException ex) {
            ta.appendText(ex.toString() + ' ');
        }
    }

    /**
     * The main method is only needed for the IDE with limited JavaFX support.
     * Not needed for running from the command line.
     */
    public static void main(String[] args) {
        launch(args);
    }
}

Server.java

import java.io.*;
import java.net.*;
import java.util.Date;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;

public class Server extends Application {

    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        // Text area for displaying contents
        TextArea ta = new TextArea();

        // Create a scene and place it in the stage
        Scene scene = new Scene(new ScrollPane(ta), 450, 200);
        primaryStage.setTitle("Server"); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage

        new Thread(() -> {
            try {
                // Create a server socket
                ServerSocket serverSocket = new ServerSocket(8000);
                Platform.runLater(()
                        -> ta.appendText("Server started at " + new Date() + ' '));

                // Listen for a connection request
                Socket socket = serverSocket.accept();

                // Create data input and output streams
                DataInputStream inputFromClient = new DataInputStream(
                        socket.getInputStream());
                DataOutputStream outputToClient = new DataOutputStream(
                        socket.getOutputStream());

                while (true) {
                    // Receive radius from the client
                    double radius = inputFromClient.readDouble();

                    // Compute area
                    double area = radius * radius * Math.PI;

                    // Send area back to the client
                    outputToClient.writeDouble(area);

                    Platform.runLater(() -> {
                        ta.appendText("Radius received from client: "
                                + radius + ' ');
                        ta.appendText("Area is: " + area + ' ');
                    });
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }).start();
    }

    /**
     * The main method is only needed for the IDE with limited JavaFX support.
     * Not needed for running from the command line.
     */
    public static void main(String[] args) {
        launch(args);
    }
}

you can plug this BMI code into the server so send to the client. Just replace the radius code.

public class BMI {
private String name;
private int age;
private double weight; // in pounds
private double height; // in inches
public static final double KILOGRAMS_PER_POUND = 0.45359237;
public static final double METERS_PER_INCH = 0.0254;

public BMI(String name, int age, double weight, double height) {
    this.name = name;
    this.age = age;
    this.weight = weight;
    this.height = height;
}

public BMI(String name, double weight, double height) {
    this(name, 20, weight, height);
}

public double getBMI() {
    double bmi = weight * KILOGRAMS_PER_POUND /
      ((height * METERS_PER_INCH) * (height * METERS_PER_INCH));
    return Math.round(bmi * 100) / 100.0;
}

public String getStatus() {
    double bmi = getBMI();
    if (bmi < 18.5)
      return "Underweight";
    else if (bmi < 25)
      return "Normal";
    else if (bmi < 30)
      return "Overweight";
    else
      return "Obese";
}

public String getName() {
    return name;
}

public int getAge() {
    return age;
}

public double getWeight() {
    return weight;
}

public double getHeight() {
    return height;
}
}

Explanation / Answer

//Server.java

import java.io.*;

import java.net.*;

import java.util.Arrays;

import java.util.Date;

import javafx.application.Application;

import javafx.application.Platform;

import javafx.scene.Scene;

import javafx.scene.control.ScrollPane;

import javafx.scene.control.TextArea;

import javafx.stage.Stage;

public class Server extends Application {

    public static final double KILOGRAMS_PER_POUND = 0.45359237;

public static final double METERS_PER_INCH = 0.0254;

    @Override // Override the start method in the Application class

    public void start(Stage primaryStage) {

        // Text area for displaying contents

        TextArea ta = new TextArea();

        // Create a scene and place it in the stage

        Scene scene = new Scene(new ScrollPane(ta), 450, 200);

        primaryStage.setTitle("Server"); // Set the stage title

        primaryStage.setScene(scene); // Place the scene in the stage

        primaryStage.show(); // Display the stage

        new Thread(() -> {

            try {

                // Create a server socket

                ServerSocket serverSocket = new ServerSocket(8000);

                Platform.runLater(()

                        -> ta.appendText("Server started at " + new Date() + ' '));

                // Listen for a connection request

                Socket socket = serverSocket.accept();

                // Create data input and output streams

                DataInputStream inputFromClient = new DataInputStream(

                        socket.getInputStream());

                DataOutputStream outputToClient = new DataOutputStream(

                        socket.getOutputStream());

                while (true) {

                    // Receive weight and height from the client

                    byte[] b = new byte[1024];

                    inputFromClient.read(b);

                   //convert byte array to string

                    String data=Arrays.toString(b);

                  // split the string into two words

                    String d[]=data.split(" ");

                  // convert words to double

                    double weight=Double.parseDouble(d[0]);

                    double height=Double.parseDouble(d[1]);

                   

                    // Compute BMI

                    double bmi = weight * KILOGRAMS_PER_POUND /((height * METERS_PER_INCH) * (height * METERS_PER_INCH));

                    bmi=Math.round(bmi * 100) / 100.0;

                    // Send bmi back to the client

                    outputToClient.writeDouble(bmi);

                    Platform.runLater(() -> {

                        ta.appendText("Weight and Height received from client: "

                                + weight +" "+height+" "+ ' ');

                        ta.appendText("BMI is: " + bmi + ' ');

                    });

                }

            } catch (IOException ex) {

                ex.printStackTrace();

            }

        }).start();

    }

    /**

     * The main method is only needed for the IDE with limited JavaFX support.

     * Not needed for running from the command line.

     */

    public static void main(String[] args) {

        launch(args);

    }

}

/*********************************************************************/

//Client.java

import java.io.*;

import java.net.*;

import javafx.application.Application;

import javafx.geometry.Insets;

import javafx.geometry.Pos;

import javafx.scene.Scene;

import javafx.scene.control.Label;

import javafx.scene.control.ScrollPane;

import javafx.scene.control.TextArea;

import javafx.scene.control.TextField;

import javafx.scene.layout.BorderPane;

import javafx.stage.Stage;

public class Client extends Application {

    // IO streams

    DataOutputStream toServer = null;

    DataInputStream fromServer = null;

    @Override // Override the start method in the Application class

    public void start(Stage primaryStage) {

        // Panel p to hold the label and text field

        BorderPane paneForTextField = new BorderPane();

        paneForTextField.setPadding(new Insets(5, 5, 5, 5));

        paneForTextField.setStyle("-fx-border-color: green");

        paneForTextField.setLeft(new Label("Enter a Weight: "));

        TextField tf = new TextField();

        tf.setAlignment(Pos.BOTTOM_RIGHT);

        paneForTextField.setCenter(tf);

        paneForTextField.setPadding(new Insets(5, 5, 5, 5));

        paneForTextField.setStyle("-fx-border-color: green");

        paneForTextField.setLeft(new Label("Enter a Height: "));

        TextField tf1 = new TextField();

        tf1.setAlignment(Pos.BOTTOM_RIGHT);

        paneForTextField.setCenter(tf1);

        BorderPane mainPane = new BorderPane();

        // Text area to display contents

        TextArea ta = new TextArea();

        mainPane.setCenter(new ScrollPane(ta));

        mainPane.setTop(paneForTextField);

        // Create a scene and place it in the stage

        Scene scene = new Scene(mainPane, 450, 200);

        primaryStage.setTitle("Client"); // Set the stage title

        primaryStage.setScene(scene); // Place the scene in the stage

        primaryStage.show(); // Display the stage

        tf.setOnAction(e -> {

            try {

                // Get the weight and height from the text fields

                double weight = Double.parseDouble(tf.getText().trim());

                double height = Double.parseDouble(tf1.getText().trim());

                // convert to string

                String info=weight+" "+height;

               // covert to byte array

                byte b[]=info.getBytes();

                // Send the weight and height to the server

                toServer.write(b);

                toServer.flush();

                // Get area from the server

                double BMI = fromServer.readDouble();

                String status="";

                if (BMI < 18.5)

                    status= "Underweight";

                else if (BMI < 25)

                    status= "Normal";

                else if (BMI < 30)

                    status= "Overweight";

                else

                    status= "Obese";

                // Display to the text area

                ta.appendText("Your BMI value: " + BMI + " ");

                ta.appendText("Your Status: "+ status + ' ');

            } catch (IOException ex) {

                System.err.println(ex);

            }

        });

        try {

            // Create a socket to connect to the server

            Socket socket = new Socket("localhost", 8000);

      // Socket socket = new Socket("130.254.204.36", 8000);

            // Socket socket = new Socket("drake.Armstrong.edu", 8000);

            // Create an input stream to receive data from the server

            fromServer = new DataInputStream(socket.getInputStream());

            // Create an output stream to send data to the server

            toServer = new DataOutputStream(socket.getOutputStream());

        } catch (IOException ex) {

            ta.appendText(ex.toString() + ' ');

        }

    }

    /**

     * The main method is only needed for the IDE with limited JavaFX support.

     * Not needed for running from the command line.

     */

    public static void main(String[] args) {

        launch(args);

    }

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote