(Solved Homework): Create, test, and document a Java program with the following classes. Figure: This is an abstract class Rectangle: This extends Figure an…

this should be done by javafx noting else.

Create, test, and document a Java program with the following classes. Figure: This is an abstract class Rectangle: This extends Figure and implements the functionality needed to draw Circle: This extends Figure and implements the functionality needed to draw filled The GUI should appear as below. (Minor deviations are fine.) filled rectangles with a given color. circles with a given color. Assignment 2 Circle [x-19, y-59, radius-76, color BLUE] Rectangle [x=199, y=124, width=66, height-57, color=GREEN Circle [x=71, y=111, radius-26, color=RED] Rectangle [x-110, y 191, width-64, height-48, color-GREEN] Circle [x-30, y-199, radius-37, color-GREEN] Rectangle [x=71, y=323, width-94, height-13, color=BLUE] Rectangle [x=89, y=19, width=74, height=43, color=RED] Rectangle [x=197, y=257, width-35, height-38, color-RED] Red Green Blue Rectangle Circle Exit 27-Aug-2017 The program should work as shown in the video file and demonstrated in class. As in the video file, to draw the rectangle, the user first clicks the top left corner and then the bottom right corner. To draw a circle, the user clicks the center and

Don't use plagiarized sources. Get Your Custom Essay on
(Solved Homework): Create, test, and document a Java program with the following classes. Figure: This is an abstract class Rectangle: This extends Figure an…
Get an essay WRITTEN FOR YOU, Plagiarism free, and by an EXPERT!
Order Essay

Create, test, and document a Java program with the following classes. Figure: This is an abstract class Rectangle: This extends Figure and implements the functionality needed to draw Circle: This extends Figure and implements the functionality needed to draw filled The GUI should appear as below. (Minor deviations are fine.) filled rectangles with a given color. circles with a given color. Assignment 2 Circle [x-19, y-59, radius-76, color BLUE] Rectangle [x=199, y=124, width=66, height-57, color=GREEN Circle [x=71, y=111, radius-26, color=RED] Rectangle [x-110, y 191, width-64, height-48, color-GREEN] Circle [x-30, y-199, radius-37, color-GREEN] Rectangle [x=71, y=323, width-94, height-13, color=BLUE] Rectangle [x=89, y=19, width=74, height=43, color=RED] Rectangle [x=197, y=257, width-35, height-38, color-RED] Red Green Blue Rectangle Circle Exit 27-Aug-2017 The program should work as shown in the video file and demonstrated in class. As in the video file, to draw the rectangle, the user first clicks the top left corner and then the bottom right corner. To draw a circle, the user clicks the center and

Expert Answer

 

GUI.java

import java.awt.Stroke;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.control.Labeled;
import javafx.scene.control.ToggleButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;

// 3 points
public class GUI extends Application {
public final static int SQUARE = 0;
public final static int CIRCLE = 1;
public final static int RECTANGLE = 2;
private Color color; // used to keep the last selected color
private Label label; // used to display information on GUI

// 0.2 point
// update the text of the label object
public void setText(String str) {
// ################ COMPLETE ################
label.setText(str);
}

@Override
public void start(Stage primaryStage) {
HBox mainPane = new HBox();

//occur leftPane and rightPane
VBox leftPane = new VBox(10);
FigureCanvas rightPane = new FigureCanvas(10, 400, 500, this);
label = new Label();
label.setWrapText(true);

//occur Circle button
Button btnCircle = new Button(“Circle”);
btnCircle.setMinSize(80, 20);

//occur Square button
Button btnSquare = new Button(“Square”);
btnSquare.setMinSize(80, 20);

//occur Rectangle button
Button btnRectangle = new Button(“Rectangle”);
btnRectangle.setMinSize(80, 20);

//occur Clear All button
Button btnClearAll = new Button(“Clear All”);
btnClearAll.setMinSize(80, 20);

//occur Color ToggleGroup
ToggleGroup colorGroup = new ToggleGroup();

//occur Red radio button and set ToggleGroup
RadioButton radioRed = new RadioButton(“Red”);
radioRed.setToggleGroup(colorGroup);

//occur Green radio button and set ToggleGroup
RadioButton radioGreen = new RadioButton(“Green”);
radioGreen.setToggleGroup(colorGroup);

//occur Blue radio button and set ToggleGroup
RadioButton radioBlue = new RadioButton(“Blue”);
radioBlue.setToggleGroup(colorGroup);

//occur label1 and label2 on the leftPane
Label lblInfo1 = new Label();
Label lblInfo2 = new Label();

//Buttons,labels and RadioButtons add on the leftPane
leftPane.getChildren().addAll(radioRed, radioGreen, radioBlue);
leftPane.getChildren().addAll(btnCircle, btnSquare, btnRectangle, btnClearAll);
leftPane.getChildren().addAll(lblInfo1, lblInfo2,label);

//occur leftPane width
leftPane.setMinWidth(100);

//occur leftPane border right, left, down, up
leftPane.setPadding(new Insets(10, 0, 10, 10));

//occur rightPane width
rightPane.setWidth(400);

//occur rightPane border and color
rightPane.setStyle(“-fx-border-color: #2e8b57; -fx-border-width: 1px; “);

//leftPane and rightPane add on the mainPane
mainPane.getChildren().add(leftPane);
mainPane.getChildren().add(rightPane);

Scene scene = new Scene(mainPane, 500, 500);
primaryStage.setTitle(“Draw Figure”);
primaryStage.setScene(scene);
primaryStage.show();

radioRed.setOnAction(e -> {
if (radioRed.isSelected()) {
color = Color.RED;
}
});

radioGreen.setOnAction(e -> {
if (radioGreen.isSelected()) {
color = Color.GREEN;
}
});

radioBlue.setOnAction((ActionEvent e) -> {
if (radioBlue.isSelected()) {
color = Color.BLUE;
}
});

btnCircle.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rightPane.addFigure(CIRCLE, color);
}
});

btnRectangle.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rightPane.addFigure(RECTANGLE, color);
}
});

btnSquare.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rightPane.addFigure(SQUARE, color);
}
});

btnClearAll.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rightPane.removeAll();
}
});
}

public static void main(String[] args) {
launch(args);
}
}

Figure.java

import hw2.Drawable;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;

// 1 point
abstract class Figure implements Drawable, Comparable<Figure> {
// (“x”, “y”) are coordinates of the “center” of the figure.
// “counter” helps counting the number of figures.
// Each figure has a unique “id” which can be determined through counter.
protected int id;
protected double x;
protected double y;
protected Color color;
private static int counter;

// 0.2 point
// initialization
public Figure(double x, double y, Color c) {
// ################ COMPLETE ################
this.x = x;
this.y = y;
this.color = c;
counter++;
}

// 0.2 point
// set counter to zero
public static void setCounterToZero() {
// ################ COMPLETE ################
counter=0;
}

// 0.4 point
// Compares this figure with the specified figure, based on their area
public int compareTo(Figure fig) {
// ################ COMPLETE ################
if(this.getArea()< fig.getArea()){
return -1;
}else if(this.getArea()>fig.getArea()){
return 1;
}else
return 0;

}

// 0.2 point
// returns string representation of this figure that
// contains id, x and y information
public String toString() {
// ################ COMPLETE ################
return (“nID: “+this.id +”nX: “+ this.x +”nY: “+ this.y);

}

// draw this figure through GraphicsContext object given as argument.
// setStroke, strokeOval and strokeRect methods of GraphicsContext may be useful.
public abstract void draw(GraphicsContext gc);

// returns true if (x, y) are coordinates inside the figure, false otherwise
public abstract boolean isInside(double x, double y);

// returns the area of this figure
public abstract double getArea();

}

Circle.java

import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;

// 1 point
public class Circle extends Figure {

private double radius;

// 0.2 point
// initialization
public Circle(double x, double y, double radius, Color c) {
// ################ COMPLETE ################
super(x,y,c);
super.x = x;
super.y = y;
super.color = c;
this.radius = radius;
}

// 0.2 point
// returns the area of this figure
public double getArea() {
// ################ COMPLETE ################
return Math.PI * radius * radius;
}

// 0.2 point
// draw this figure through GraphicsContext object given as argument
public void draw(GraphicsContext gc) {
// ################ COMPLETE ################
gc.getStroke();
gc.setStroke(color);
gc.strokeOval(x, y, radius, radius);
}

// 0.2 point
// returns true if (x, y) are coordinates inside the figure, false otherwise
public boolean isInside(double x, double y) {
// ################ COMPLETE ################
double x1 = this.x;
double x2 = this.x + 2*(this.radius);
double y1 = this.y;
double y2 = this.y + 2*(this.radius);
if(x >= x1 && x <= x2 && y >= y1 && y <= y2){
return true;
}
return false;
}

// 0.2 point
// returns string representation of this figure that contains figure name, radius,
// and id, x and y information obtained through superclass by a method call
@Override
public String toString() {
// ################ COMPLETE ################
String info = “Name: Circle” + “nRadius: ” + this.radius + ” “;
info += super.toString();
return info;
}
}

Drawable.java

import javafx.scene.canvas.GraphicsContext;

public interface Drawable {
// draw this through GraphicsContext object given as argument
public abstract void draw(GraphicsContext gc);
}

FigureCanvas.java

import hw2.GUI;
import java.util.ArrayList;
import java.util.Random;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;

// 3 points
// manages and draws figures
public class FigureCanvas extends Canvas {
private ArrayList<Figure> list; // contains figures
private int capacity; // determines the max number of figures in the list
private GraphicsContext gc; // used for drawing figures
private GUI myGUI; // points to the GUI object
private Figure fig_selected; // lastly selected figure

// 0.4 point
// initialization
public FigureCanvas(int capacity, int width, int height, GUI myGUI) {
// ################ COMPLETE ################
super(width, height);
list = new ArrayList<Figure>();
this.capacity = capacity;
this.myGUI = myGUI;

// getGraphicsContext2D is a method of Canvas returning GraphicsContext object,
// which is used for drawing figures
gc = getGraphicsContext2D();
// draws a rectangle on the border of the canvas
gc.strokeRect(0, 0, width, height);

}

public void addFigure(int figure, Color c) {
// ################ COMPLETE ################
Random rnd = new Random();

if (list.size()==10 || list.size()>10)
myGUI.setText(“CAPACITY FULL!!!”);
else{
if (figure==0) {
Figure fs = new Square(rnd.nextInt(401), rnd.nextInt(501), rnd.nextInt(101), c);

list.add(fs);
fs.draw(gc);
myGUI.setText(fs.toString());
}
else if (figure==1) {
Figure fs = new Circle(rnd.nextInt(400), rnd.nextInt(501), rnd.nextInt(51), c);

list.add(fs);
fs.draw(gc);
myGUI.setText(fs.toString());
}
else{
Figure fs = new Rectangle(rnd.nextInt(400), rnd.nextInt(501), rnd.nextInt(201), rnd.nextInt(251), c);

list.add(fs);
fs.draw(gc);
myGUI.setText(fs.toString());
}
}
}

// 0.6 point
// select the figure containing the given (x, y) coordinates
public void selectFigureContaining(double x, double y) {
String str = “”;
Figure fig_current = null; // points the figure containing the given (x, y) coordinates

if (fig_selected != null && fig_current != null) {
str += fig_selected + “n”;
int res = fig_selected.compareTo(fig_current);
if (res > 0)
str += “>”;
else if (res < 0)
str += “<“;
else
str += “==”;
str += “n” + fig_current;
}
fig_selected = fig_current;

// 0.2 point
// display comparison information on GUI through setText method call
// ################ COMPLETE ################
myGUI.setText(str);
myGUI.toString();

}

public void removeAll() {
// ################ COMPLETE ################
list.clear();
gc.clearRect(1, 1, 398, 498);
myGUI.setText(“Cleaned !”);

}
}

Rectangle.java

import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;

// 1 point
public class Rectangle extends Square {
// in addition to the “width” data field of a square,
// “height” data field is added for a rectangle.
private double height;

public Rectangle(double x, double y, double width, double height, Color c) {
// ################ COMPLETE ################
super(x,y,width,c);
this.height = height;
super.width = width;
super.x = x;
super.y = y;
}

// 0.2 point
// returns the area of this figure
public double getArea() {
// ################ COMPLETE ################
return width*height;
}

// 0.2 point
// draw this figure through GraphicsContext object given as argument
public void draw(GraphicsContext gc) {
// ################ COMPLETE ################
gc.getStroke();
gc.setStroke(color);
gc.strokeRect(x, y, width, height);
}

// 0.2 point
// returns true if (x, y) are coordinates inside the figure, false otherwise
public boolean isInside(double x, double y) {
// ################ COMPLETE ################
double figurex1 = this.x;
double figurex2 = this.x + this.width;
double figurey1 = this.y;
double figurey2 = this.y + this.height;
if(x >= figurex1 && x <= figurex2 && y >= figurey1 && y <= figurey2){
return true;
}
return false;
}

// 0.2 point
// returns string representation of this figure that contains figure name, width,
// height and id, x and y information
public String toString() {
// ################ COMPLETE ################
String info = “Name: Rectangle ” + “nHeight :” + this.height + ” “;
info += “nWidth: ” + this.width + “nID: ” + this.id + “nX: ” + this.x + “nY: ” + this.y;
return info;

}
}

Square.java

import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;

// 1 point
public class Square extends Figure {

// since both sides of a square are equal,
// a “width” data field is enough to store the necessary data concerning a square
protected double width;

// 0.2 point
// initialization
public Square(double x, double y, double width, Color c) {
// ################ COMPLETE ################
super(x,y,c);
super.x = x;
super.y = y;
this.width = width;
super.color = c;
}

// 0.2 point
// returns the area of this figure
public double getArea() {
// ################ COMPLETE ################
return width*width;
}

// 0.2 point
// draw this figure through GraphicsContext object given as argument
public void draw(GraphicsContext gc) {
// ################ COMPLETE ################
gc.getStroke();
gc.setStroke(color);
gc.strokeRect(x, y, width, width);
}

// 0.2 point
// returns true if (x, y) are coordinates inside the figure, false otherwise
public boolean isInside(double x, double y) {
// ################ COMPLETE ################
double figurex1 = this.x;
double figurex2 = this.x + this.width;
double figurey1 = this.y;
double figurey2 = this.y + this.width;
if(x >= figurex1 && x <= figurex2 && y >= figurey1 && y <= figurey2){
return true;
}
return false;
}

public String toString() {
// ################ COMPLETE ################
String info = “Name: Square ” + “nWidth: ” + this.width + ” ” + super.toString();
return info;
}
}

Homework Ocean
Calculate your paper price
Pages (550 words)
Approximate price: -

Why Work with Us

Top Quality and Well-Researched Papers

We always make sure that writers follow all your instructions precisely. You can choose your academic level: high school, college/university or professional, and we will assign a writer who has a respective degree.

Professional and Experienced Academic Writers

We have a team of professional writers with experience in academic and business writing. Many are native speakers and able to perform any task for which you need help.

Free Unlimited Revisions

If you think we missed something, send your order for a free revision. You have 10 days to submit the order for review after you have received the final document. You can do this yourself after logging into your personal account or by contacting our support.

Prompt Delivery and 100% Money-Back-Guarantee

All papers are always delivered on time. In case we need more time to master your paper, we may contact you regarding the deadline extension. In case you cannot provide us with more time, a 100% refund is guaranteed.

Original & Confidential

We use several writing tools checks to ensure that all documents you receive are free from plagiarism. Our editors carefully review all quotations in the text. We also promise maximum confidentiality in all of our services.

24/7 Customer Support

Our support agents are available 24 hours a day 7 days a week and committed to providing you with the best customer experience. Get in touch whenever you need any assistance.

Try it now!

Calculate the price of your order

Total price:
$0.00

How it works?

Follow these simple steps to get your paper done

Place your order

Fill in the order form and provide all details of your assignment.

Proceed with the payment

Choose the payment system that suits you most.

Receive the final file

Once your paper is ready, we will email it to you.

Our Services

No need to work on your paper at night. Sleep tight, we will cover your back. We offer all kinds of writing services.

Essays

Essay Writing Service

No matter what kind of academic paper you need and how urgent you need it, you are welcome to choose your academic level and the type of your paper at an affordable price. We take care of all your paper needs and give a 24/7 customer care support system.

Admissions

Admission Essays & Business Writing Help

An admission essay is an essay or other written statement by a candidate, often a potential student enrolling in a college, university, or graduate school. You can be rest assurred that through our service we will write the best admission essay for you.

Reviews

Editing Support

Our academic writers and editors make the necessary changes to your paper so that it is polished. We also format your document by correctly quoting the sources and creating reference lists in the formats APA, Harvard, MLA, Chicago / Turabian.

Reviews

Revision Support

If you think your paper could be improved, you can request a review. In this case, your paper will be checked by the writer or assigned to an editor. You can use this option as many times as you see fit. This is free because we want you to be completely satisfied with the service offered.

× Contact Live Agents