Java - Shapes Generator Project In Java Netbeans

How to Create a Shape Generator App In Java Netbeans

Java Project Tutorial - How To Create a Geometric Shapes Generator Project In Java Netbeans.


In this Java Tutorial we will see How To Make a Geometric Shapes Generator Project In Java Using Netbeans.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.

What We Will Do In This Project:

- Create an inner class called DrawingPanel that extends JPanel.
- Create a method to generate random shapes type (e.g., circle, rectangle, triangle), with random values for position, and size.
- Create a method "createRegularPolygon", to create regular polygons like pentagons and hexagons.





Project Source Code:


package new_tutorials;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class ShapeGeneratorApp extends JFrame {
    
    private DrawingPanel drawingPanel;
    private JButton generateButton;

    public ShapeGeneratorApp()
    {
        setTitle("Shape Generator");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 600);
        setLocationRelativeTo(null);
        
        // Initialize the drawing panel and the "Generate Shape" button
        drawingPanel = new DrawingPanel();
        generateButton = new JButton("Generate Shape");
        generateButton.setFocusPainted(false);
        generateButton.setBorderPainted(false);
        generateButton.setBackground(new Color(63, 81, 181));
        generateButton.setForeground(Color.white);
        generateButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        generateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              // Call the method to generate a random shape
                drawingPanel.generateRandomShape();
                
            }
        });
        
        // Create a panel to hold the button
        JPanel controlPanel = new JPanel();
        controlPanel.add(generateButton);
        
        // Set the layout and add the controls panel and drawing panel to the JFrame
        setLayout(new BorderLayout());
        add(controlPanel, BorderLayout.NORTH);
        add(drawingPanel, BorderLayout.CENTER);
        
    }
    
    // Inner class to handle the drawing panel
    private class DrawingPanel extends JPanel
    {
        private Shape currentShape;
        private Color currentColor;
        
        public DrawingPanel()
        {
            setBackground(Color.WHITE);
            currentColor = Color.BLACK;
        }
        
        // Method to generate a random shape
        public void generateRandomShape()
        {
            
            Random random = new Random();
            // Update the limit to include all shape types
            int ShapeType = random.nextInt(6);
            int x = random.nextInt(getWidth() - 50);
            int y = random.nextInt(getHeight() - 50);
            int size = random.nextInt(100) + 50;
            
            switch (ShapeType)
            {
                
                case 0: // circle
                    currentShape = new Ellipse2D.Double(x,y, size,size);
                    break;
                    
                case 1: // rectangle
                    int width = random.nextInt(100)+50;
                    int height = random.nextInt(100)+50;
                    currentShape = new Rectangle(x,y, width,height);
                    break;
                    
                case 2: // triangle
                    int[] xPoints = {x, x + size / 2, x + size};
                    int[] yPoints = {y + size, y, y + size};
                    currentShape = new Polygon(xPoints, yPoints,3);
                    break;
                    
                case 3: // square
                    currentShape = new Rectangle(x,y, size,size);
                    break;
                   
                case 4: // pentagon
                    currentShape = createRegularPolygon(x,y, size,5);
                    break;
                    
                case 5: // hexagon
                    currentShape = createRegularPolygon(x,y, size,6);
                    break;
            
            }
            
            // create a new color
            currentColor = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
            
            // Repaint the panel to show the newly generated shape
            repaint();        
        }
        
        
        // Method to create a regular polygon
        private Shape createRegularPolygon(int x, int y, int size, int sides)
        {
            GeneralPath path = new GeneralPath();
            double angle = 2 * Math.PI/sides;
            
            path.moveTo(x+size*Math.cos(0), y+size*Math.sin(0));
            
            for(int i = 1; i < sides; i++)
            {
                path.lineTo(x+size*Math.cos(angle*i), y+size*Math.sin(angle*i));
            }
            
            path.closePath();
            return path;
        }
        
        
        @Override
        protected void paintComponent(Graphics g){
            
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            
            // Check if there's a shape to draw
            if(currentShape != null)
            {
                g2d.setColor(currentColor);
                g2d.fill(currentShape);
            }
            
        }
        
    }
    
    
    public static void main(String[] args){
        SwingUtilities.invokeLater(()->{
        
            ShapeGeneratorApp shapeGenerator = new ShapeGeneratorApp();
            shapeGenerator.setVisible(true);
            
        });
    }
    
    
}


The Final Result:

circle

hexagon

pentagon

rectangle

square

triangle






Aucun commentaire:

Enregistrer un commentaire