Advertisement
binibiningtinamoran

LineInfoGUI.java

Nov 13th, 2019
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.34 KB | None | 0 0
  1. import javafx.application.*;
  2. import javafx.geometry.*;
  3. import javafx.scene.*;
  4. import javafx.scene.control.*;
  5. import javafx.scene.input.*;
  6. import javafx.scene.layout.*;
  7. import javafx.scene.paint.*;
  8. import javafx.scene.shape.*;
  9. import javafx.scene.text.*;
  10. import javafx.stage.*;
  11. import java.time.*;
  12. import java.time.format.DateTimeFormatter;
  13.  
  14. public class LineInfoGUI extends Application {
  15.  
  16.     private Pane pane;
  17.     private BorderPane borderPane;
  18.     private Circle startPoint, endPoint;
  19.     private Line line;
  20.     private Button distanceButton, midpointButton, vertHorzButton;
  21.     private Text distanceText, midpointText, vertHorzText, timeText;
  22.     private LineInfoDisplayer lineInfoDisplayer;
  23.  
  24.     private static final int CIRCLE_RADIUS = 5;
  25.  
  26.     public void start(Stage primaryStage) {
  27.         borderPane = new BorderPane();
  28.  
  29.         pane = new Pane();
  30.         pane.setOnMouseClicked(this::handleMouseClicks);
  31.         borderPane.setCenter(pane);
  32.  
  33.         distanceText = new Text("");
  34.         distanceButton = new Button("Calculate Distance");
  35.         distanceButton.setOnAction(event -> {
  36.             if (line != null) {
  37.                 lineInfoDisplayer =
  38.                         LineInfoDisplayer.createLineInfoDisplayer(LineInfoDisplayer.InfoType.DISTANCE);
  39.                 assert lineInfoDisplayer != null;
  40.                 distanceText.setText(lineInfoDisplayer.getInfo(line));
  41.  
  42.             }
  43.         });
  44.  
  45.         midpointText = new Text("");
  46.         midpointButton = new Button("Calculate Midpoint");
  47.         midpointButton.setOnAction(event -> {
  48.             if (line != null) {
  49.                 lineInfoDisplayer =
  50.                         LineInfoDisplayer.createLineInfoDisplayer(LineInfoDisplayer.InfoType.MIDPOINT);
  51.                 assert lineInfoDisplayer != null;
  52.                 midpointText.setText(lineInfoDisplayer.getInfo(line));
  53.             }
  54.         });
  55.  
  56.         vertHorzText = new Text("");
  57.         vertHorzButton = new Button("Determine Vertical/Horizontal");
  58.         vertHorzButton.setOnAction(event -> {
  59.             if (line != null) {
  60.                 lineInfoDisplayer =
  61.                         LineInfoDisplayer.createLineInfoDisplayer(LineInfoDisplayer.InfoType.VERTHORZ);
  62.                 assert lineInfoDisplayer != null;
  63.                 vertHorzText.setText(lineInfoDisplayer.getInfo(line));
  64.             }
  65.         });
  66.  
  67.         timeText = new Text("");
  68.  
  69.         TilePane distancePane = new TilePane(distanceButton, distanceText);
  70.         distancePane.setAlignment(Pos.CENTER);
  71.         TilePane midpointPane = new TilePane(midpointButton, midpointText);
  72.         midpointPane.setAlignment(Pos.CENTER);
  73.         TilePane vertHorzPane = new TilePane(vertHorzButton, vertHorzText);
  74.         vertHorzPane.setAlignment(Pos.CENTER);
  75.         TilePane timePane = new TilePane(timeText);
  76.         timePane.setAlignment(Pos.CENTER);
  77.  
  78.         VBox controlBox = new VBox(distancePane, midpointPane, vertHorzPane, timePane);
  79.         controlBox.setAlignment(Pos.CENTER);
  80.         controlBox.setSpacing(15);
  81.  
  82.         borderPane.setBottom(controlBox);
  83.  
  84.         Scene scene = new Scene(borderPane, 500, 500, Color.WHITE);
  85.         primaryStage.setTitle("Line Information");
  86.         primaryStage.setScene(scene);
  87.         primaryStage.show();
  88.     }
  89.  
  90.     private void handleMouseClicks(MouseEvent event) {
  91.         double x = event.getX();
  92.         double y = event.getY();
  93.  
  94.         if (startPoint == null) { // no start point yet, set the start point
  95.             startPoint = new Circle(x, y, CIRCLE_RADIUS);
  96.             pane.getChildren().add(startPoint);
  97.             createCoordinates(x, y);
  98.             line = null;
  99.         } else if (endPoint == null) { // start point, but not end point yet
  100.             // set the end point
  101.             endPoint = new Circle(x, y, CIRCLE_RADIUS);
  102.             pane.getChildren().add(endPoint);
  103.             createCoordinates(x, y);
  104.  
  105.             line = new Line(startPoint.getCenterX(), startPoint.getCenterY(), endPoint.getCenterX(), endPoint.getCenterY());
  106.             pane.getChildren().add(line);
  107.             timeStampGenerator();
  108.  
  109.         } else { // startPoint != null && endPoint !=null
  110.             // both start and end are there, so this is starting a new line;
  111.             // set a new start point
  112.             pane.getChildren().clear();
  113.             endPoint = null;
  114.             line = null;
  115.             distanceText.setText("");
  116.             midpointText.setText("");
  117.             vertHorzText.setText("");
  118.  
  119.             startPoint = new Circle(x, y, CIRCLE_RADIUS);
  120.             pane.getChildren().add(startPoint);
  121.             createCoordinates(x, y);
  122.         }
  123.  
  124.     }
  125.  
  126.     private void createCoordinates(double x, double y) {
  127.         String coordinateString = "(" + x + ", " + y + ")";
  128.         Text coordinates = new Text(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS - 2, coordinateString);
  129.         pane.getChildren().add(coordinates);
  130.     }
  131.  
  132.     private void timeStampGenerator() {
  133.         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("MMM dd, yyyy EEE " +
  134.                 "HH:mm:ss a");
  135.         LocalDateTime currentLDT = LocalDateTime.now();
  136.         String localDateTimeString = dateTimeFormatter.format(currentLDT);
  137.         timeText.setText("Line created on " + localDateTimeString);
  138.     }
  139.  
  140.     public static void main(String[] args) {
  141.         launch(args);
  142.     }
  143.  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement