Untitled

 avatar
unknown
java
2 years ago
4.8 kB
6
Indexable
import java.awt.*;
import java.awt.event.*;

abstract class Shape extends Frame {
    protected Color[] availableColors = { Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW };
    protected int currentColorIndex = 0;
    protected Color color;
    protected Point position;
    protected int size;

    public Shape(Color color, int xPosition, int yPosition, int size) {
        this.color = color;
        this.position = new Point(xPosition, yPosition);
        this.size = size;

        setTitle("Shape Printer");
        setSize(400, 400);
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                dispose();
            }
        });

        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                char keyChar = e.getKeyChar();
                if (keyChar == '+') {
                    resizeShape(1);
                    calculateVolume();
                } else if (keyChar == '-') {
                    resizeShape(-1);
                    calculateVolume(); 
                }
                repaint();
            }
        });

        addMouseListener(new MouseAdapter() {
            private int prevX;
            private int prevY;
            private boolean isDragging = false;

            public void mousePressed(MouseEvent e) {
                int mouseX = e.getX();
                int mouseY = e.getY();

                if (isInsideShape(mouseX, mouseY)) {
                    prevX = mouseX - position.x;
                    prevY = mouseY - position.y;
                    isDragging = true;
                }
            }

            public void mouseReleased(MouseEvent e) {
                isDragging = false;
            }

            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 1) {
                    changeColor();
                    repaint();
                } else if (e.getClickCount() == 2) {
                    repaint();
                }
                calculateVolume();
            }

            public void mouseDragged(MouseEvent e) {
                if (isDragging) {
                    int mouseX = e.getX();
                    int mouseY = e.getY();
                    position.x = mouseX - prevX;
                    position.y = mouseY - prevY;
                    repaint();
                }
            }
        });
    }

    protected abstract boolean isInsideShape(int mouseX, int mouseY);

    protected void resizeShape(int factor) {
        size += factor;
        if (size < 1) {
            size = 1;
        }
    }

    protected void changeColor() {
        currentColorIndex = (currentColorIndex + 1) % availableColors.length;
        color = availableColors[currentColorIndex];
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(color);
        drawShape(g);
    }

    protected abstract void drawShape(Graphics g);

    protected abstract void calculateVolume();
}

import java.awt.*;

class Circle extends Shape {
    public Circle(Color color, int xPosition, int yPosition, int size) {
        super(color, xPosition, yPosition, size);
    }

    protected boolean isInsideShape(int mouseX, int mouseY) {
        int centerX = position.x + size;
        int centerY = position.y + size;
        int distance = (int) Math.sqrt(Math.pow(centerX - mouseX, 2) + Math.pow(centerY - mouseY, 2));
        return distance <= size;
    }


    protected void drawShape(Graphics g) {
        g.fillOval(position.x, position.y, size * 2, size * 2);
    }

    protected void calculateVolume() {
        double area = Math.PI * Math.pow(size, 2);
        System.out.println("Volume (Circle): " + area);
    }
}

import java.awt.*;

class Square extends Shape {
    public Square(Color color, int xPosition, int yPosition, int size) {
        super(color, xPosition, yPosition, size);
    }

    protected boolean isInsideShape(int mouseX, int mouseY) {
        return mouseX >= position.x && mouseX <= position.x + size * 2 &&
                mouseY >= position.y && mouseY <= position.y + size * 2;
    }

    protected void drawShape(Graphics g) {
        g.fillRect(position.x, position.y, size * 2, size * 2);
    }

    protected void calculateVolume() {
        double area = Math.pow(size, 2);
        System.out.println("Volume (Square): " + area);
    }
}

import java.awt.Color;


public class Main {
    public static void main(String[] args) {
        Color color = Color.RED;
        int xPosition = 100;
        int yPosition = 100;
        int size = 20;

        Circle circle = new Circle(color, xPosition, yPosition, size);
        Square square = new Square(color, xPosition, yPosition, size);
    }
}




Editor is loading...