Untitled
unknown
plain_text
a year ago
8.9 kB
10
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