In: Computer Science
Hello. I'm trying to write down java code making stars whose numbers are determined by user input on the console (each star's data are stored in ArrayList).
the class extends JFrame and its color, size(Zoom in and Zoom out), and location are changing every time.
Moreover, its angular rotation is changed at a certain determined degree.
Does anyone know how to write down the java code of this question?
Solution:
stars_frame.java:
//stars_frame.java file to draw number of stars as input given by user
import java.awt.Color;
import java.util.Scanner;
import javax.swing.JFrame;
import java.util.ArrayList;
import java.util.Random;
public class stars_frame extends JFrame {
// size of window
private final int WINDOW_SIZE = 600;
// array list of stars_frame
private ArrayList<Star> stars_frameList;
//n is numbers of starts given as input
public stars_frame(int n) {
// passing a title to super class constructor
super("stars_frame");
Random random = new Random();
// no layout manager for absolute positioning
setLayout(null);
// initializing array list
stars_frameList = new ArrayList<Star>();
// looping for number of times to draw stars_frame
for (int i = 0; i < n; i++) {
// generating a random size between 50 and 150
int size = random.nextInt(100) + 50;
// creating a star with random angle, random color and above size
Star star = new Star(random.nextInt(360), new Color(
random.nextInt(256), random.nextInt(256),
random.nextInt(256)), size);
// specifying star in a random location on the window
star.setBounds(random.nextInt(WINDOW_SIZE - size),
random.nextInt(WINDOW_SIZE - size), size, size);
// adding stars_frame to window
add(star);
// adding to list, so that each star can be altered later when you want
stars_frameList.add(star);
}
//display window
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(WINDOW_SIZE, WINDOW_SIZE);
setVisible(true);
}
public static void main(String[] args) {
//taking input as number of stars_frame
Scanner scanner = new Scanner(System.in);
System.out.print("Enter number of stars_frame: ");
int no_stars = scanner.nextInt();
new stars_frame(no_stars);
}
}
Star.java:
//Star.java extending JPanel to represent a single star
import java.awt.Color;//color package
import java.awt.Dimension;//for dimensions
import java.awt.Graphics;//graphics package
import java.awt.Polygon;
import javax.swing.JPanel;
public class Star extends JPanel {
// attributes using to store angle and color
private double angle;
private Color color;
// constructor to take angle, color and size
public Star(double angle, Color color, int size) {
this.angle = angle;
this.color = color;
// trnsperant background color
setBackground(new Color(0, 0, 0, 0));
setPreferredSize(new Dimension(size, size));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// angle
double temp_angle = angle;
// center-coordinates
double Center_X = getWidth() / 2, Center_Y = getHeight() / 2;
// distance between edge and center of the star
double radius = getWidth() / 2;
// distance between center of star to the vertex between edges
double innerRadius = getWidth() / 5;
// dividing a circle into 10 parts
int angle_difference = 360 / 10;
// polygan
Polygon polygon = new Polygon();
double x, y;
// looping for 10 times
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
x = Center_X + radius * Math.cos(Math.toRadians(temp_angle));
y = Center_Y + radius * Math.sin(Math.toRadians(temp_angle));
} else {
x = Center_X + innerRadius
* Math.cos(Math.toRadians(temp_angle));
y = Center_Y + innerRadius
* Math.sin(Math.toRadians(temp_angle));
}
// adding to polygon
polygon.addPoint((int) x, (int) y);
// updating temp_angle
temp_angle += angle_difference;
}
// white colour to fill polygon
g.setColor(color);
g.fillPolygon(polygon);
// black colour for polygan outline
g.setColor(Color.BLACK);
g.drawPolygon(polygon);
}
}
Example input of n=20:
Thank you, Have a great day:-)