Untitled
unknown
plain_text
a year ago
8.9 kB
12
Indexable
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Act3 extends JFrame {
private JComboBox<String> shapeComboBox;
private JTextField lengthTextField;
private JTextField widthTextField;
private JButton computeButton;
private JLabel perimeterLabel;
private JLabel areaLabel;
private JTextField perimeterTextField;
private JTextField areaTextField;
private Shape shape;
public Act3() {
super("Shape Calculator");
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
String[] shapes = {"Circle", "Rectangle", "Square", "Triangle"};
shapeComboBox = new JComboBox<>(shapes);
shapeComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String shapeName = (String) shapeComboBox.getSelectedItem();
if (shapeName.equals("Circle")) {
shape = new Circle();
lengthTextField.setText("Radius:");
widthTextField.setText("");
widthTextField.setEnabled(false);
} else if (shapeName.equals("Rectangle")) {
shape = new Rectangle();
lengthTextField.setText("Length:");
widthTextField.setText("Width:");
widthTextField.setEnabled(true);
}
else if (shapeName.equals("Square")) {
shape = new Square();
lengthTextField.setText("Side:");
widthTextField.setText("");
widthTextField.setEnabled(false);
} else if (shapeName.equals("Triangle")) {
shape = new Triangle();
lengthTextField.setText("Base:");
widthTextField.setText("Height:");
widthTextField.setEnabled(true);
}
}
});
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 2;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(shapeComboBox, constraints);
lengthTextField = new JTextField(10);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(lengthTextField, constraints);
widthTextField = new JTextField(10);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(widthTextField, constraints);
computeButton = new JButton("Compute");
constraints.gridx = 0;
constraints.gridy = 2;
constraints.gridwidth = 2;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.insets = new Insets(10, 0, 0, 0);
add(computeButton, constraints);
computeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
double length = Double.parseDouble(lengthTextField.getText());
double width = widthTextField.isEnabled()? Double.parseDouble(widthTextField.getText()) : 0;
shape.setMeasurement(length, width);
perimeterTextField.setText(String.format("%.2f", shape.getPerimeter()));
areaTextField.setText(String.format("%.2f", shape.getArea()));
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(Act3.this, "Please enter valid numerical values.");
}
}
});
perimeterLabel = new JLabel("Perimeter:");
constraints.gridx = 0;
constraints.gridy = 3;
constraints.gridwidth = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(perimeterLabel, constraints);
perimeterTextField = new JTextField(10);
constraints.gridx = 1;
constraints.gridy = 3;
constraints.gridwidth = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
perimeterTextField.setEditable(false);
add(perimeterTextField, constraints);
areaLabel = new JLabel("Area:");
constraints.gridx = 0;
constraints.gridy = 4;
constraints.gridwidth = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(areaLabel, constraints);
areaTextField = new JTextField(10);
constraints.gridx = 1;
constraints.gridy = 4;
constraints.gridwidth = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
areaTextField.setEditable(false);
add(areaTextField, constraints);
setSize(400, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
}
public static void main(String[] args) {
new Act3();
}
}
interface Shape {
void setMeasurement(double length, double width);
double getPerimeter();
double getArea();
}
class Circle implements Shape {
private double radius;
private double perimeter;
private double area;
@Override
public void setMeasurement(double length, double width) {
radius = length;
perimeter = computePerimeter();
area = computeArea();
}
@Override
public double getPerimeter() {
return perimeter;
}
@Override
public double getArea() {
return area;
}
private double computePerimeter() {
return 2 * Math.PI * radius;
}
private double computeArea() {
return Math.PI * radius * radius;
}
}
class Rectangle implements Shape {
private double length;
private double width;
private double perimeter;
private double area;
@Override
public void setMeasurement(double length, double width) {
this.length = length;
this.width = width;
perimeter = computePerimeter();
area = computeArea();
}
@Override
public double getPerimeter() {
return perimeter;
}
@Override
public double getArea() {
return area;
}
private double computePerimeter() {
return 2 * (length + width);
}
private double computeArea() {
return length * width;
}
}
class RightTriangle implements Shape {
private double base;
private double height;
private double perimeter;
private double area;
@Override
public void setMeasurement(double length, double width) {
base = length;
height = width;
perimeter = computePerimeter();
area = computeArea();
}
@Override
public double getPerimeter() {
return perimeter;
}
@Override
public double getArea() {
return area;
}
private double computePerimeter() {
return base + height + Math.sqrt(base * base + height * height);
}
private double computeArea() {
return 0.5 * base * height;
}
}
class Square implements Shape {
private double side;
private double perimeter;
private double area;
@Override
public void setMeasurement(double length, double width) {
side = length;
perimeter = computePerimeter();
area= computeArea();
}
@Override
public double getPerimeter() {
return perimeter;
}
@Override
public double getArea() {
return area;
}
private double computePerimeter() {
return 4 * side;
}
private double computeArea() {
return side * side;
}
}
class Triangle implements Shape {
private double base;
private double height;
private double perimeter;
private double area;
@Override
public void setMeasurement(double length, double width) {
base = length;
height = width;
perimeter = computePerimeter();
area = computeArea();
}
@Override
public double getPerimeter() {
return perimeter;
}
@Override
public double getArea() {
return area;
}
private double computePerimeter() {
return base + height + Math.sqrt(base * base + height * height);
}
private double computeArea() {
return 0.5 * base * height;
}
}Editor is loading...
Leave a Comment