Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java Separate JPanels, DrawArcs.java(Fan) and StillClock.java(clock) are given b

ID: 3836695 • Letter: J

Question

Java

Separate JPanels, DrawArcs.java(Fan) and StillClock.java(clock) are given below.

Use your own thread to give them a life, that means make the clock to work in realtime, and Fan to start. Use own GUI to start and stop as you wish.

import javax.swing.JFrame;

import javax.swing.JPanel;

import java.awt.Graphics;

public class DrawArcs extends JFrame {

public DrawArcs() {

setTitle("DrawArcs");

add(new ArcsPanel());

}

/** Main method */

public static void main(String[] args) {

DrawArcs frame = new DrawArcs();

frame.setLocationRelativeTo(null); // Center the frame

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(250, 300);

frame.setVisible(true);

}

}

// The class for drawing arcs on a panel

class ArcsPanel extends JPanel {

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

int xCenter = getWidth() / 2;

int yCenter = getHeight() / 2;

int radius = (int)(Math.min(getWidth(), getHeight()) * 0.4);

int x = xCenter - radius;

int y = yCenter - radius;

g.fillArc(x, y, 2 * radius, 2 * radius, 0, 30);

g.fillArc(x, y, 2 * radius, 2 * radius, 90, 30);

g.fillArc(x, y, 2 * radius, 2 * radius, 180, 30);

g.fillArc(x, y, 2 * radius, 2 * radius, 270, 30);

}

}

import java.awt.*;

import javax.swing.*;

import java.util.*;

public class StillClock extends JPanel {

private int hour;

private int minute;

private int second;

/** Construct a default clock with the current time*/

public StillClock() {

setCurrentTime();

}

/** Construct a clock with specified hour, minute, and second */

public StillClock(int hour, int minute, int second) {

this.hour = hour;

this.minute = minute;

this.second = second;

}

/** Return hour */

public int getHour() {

return hour;

}

/** Set a new hour */

public void setHour(int hour) {

this.hour = hour;

repaint();

}

/** Return minute */

public int getMinute() {

return minute;

}

/** Set a new minute */

public void setMinute(int minute) {

this.minute = minute;

repaint();

}

/** Return second */

public int getSecond() {

return second;

}

/** Set a new second */

public void setSecond(int second) {

this.second = second;

repaint();

}

@Override /** Draw the clock */

protected void paintComponent(Graphics g) {

super.paintComponent(g);

// Initialize clock parameters

int clockRadius =

(int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);

int xCenter = getWidth() / 2;

int yCenter = getHeight() / 2;

// Draw circle

g.setColor(Color.black);

g.drawOval(xCenter - clockRadius, yCenter - clockRadius,

2 * clockRadius, 2 * clockRadius);

g.drawString("12", xCenter - 5, yCenter - clockRadius + 12);

g.drawString("9", xCenter - clockRadius + 3, yCenter + 5);

g.drawString("3", xCenter + clockRadius - 10, yCenter + 3);

g.drawString("6", xCenter - 3, yCenter + clockRadius - 3);

// Draw second hand

int sLength = (int)(clockRadius * 0.8);

int xSecond = (int)(xCenter + sLength *

Math.sin(second * (2 * Math.PI / 60)));

int ySecond = (int)(yCenter - sLength *

Math.cos(second * (2 * Math.PI / 60)));

g.setColor(Color.red);

g.drawLine(xCenter, yCenter, xSecond, ySecond);

// Draw minute hand

int mLength = (int)(clockRadius * 0.65);

int xMinute = (int)(xCenter + mLength *

Math.sin(minute * (2 * Math.PI / 60)));

int yMinute = (int)(yCenter - mLength *

Math.cos(minute * (2 * Math.PI / 60)));

g.setColor(Color.blue);

g.drawLine(xCenter, yCenter, xMinute, yMinute);

// Draw hour hand

int hLength = (int)(clockRadius * 0.5);

int xHour = (int)(xCenter + hLength *

Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));

int yHour = (int)(yCenter - hLength *

Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));

g.setColor(Color.green);

g.drawLine(xCenter, yCenter, xHour, yHour);

}

public void setCurrentTime() {

// Construct a calendar for the current date and time

Calendar calendar = new GregorianCalendar();

// Set current hour, minute and second

this.hour = calendar.get(Calendar.HOUR_OF_DAY);

this.minute = calendar.get(Calendar.MINUTE);

this.second = calendar.get(Calendar.SECOND);

}

@Override

public Dimension getPreferredSize() {

return new Dimension(200, 200);

}

}

Explanation / Answer

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class ClockAnimation extends JFrame
{
//create an instance for StillClock
private StillClock clock = new StillClock();

//create buttons
JButton startButton;
JButton stopButton;

//create a timer (1000 milliseconds delay)
Timer timer = new Timer(1000, new TimerListener());

public ClockAnimation()
{
//create a panel to hold the clock
JPanel clockPanel = new JPanel();

//add the clock to panel
clockPanel.add(clock);

//create a panel to hold start and stop buttons
JPanel ButtonPanel = new JPanel();

//create a start button
startButton = new JButton("Start");
//add action listener to startButton
startButton.addActionListener(new startListener());
//create a stop button
stopButton = new JButton("Stop");
//add action listener to stopButton
stopButton.addActionListener(new stopListener());
//add start button to ButtonPanel
ButtonPanel.add(startButton);
//add stop button to ButtonPanel
ButtonPanel.add(stopButton);

//create elapsedPanel to hold elaped time
JPanel ElspsedPanel = new JPanel();

//add start time to panel
add.(timer.start());
//add stop time to panel
add.(timer.stop());
//add the elapsed time to panel
ElapsedPanel.add((timer.start())-(timer.stop()));


//add the clockPanel and ButtonPanel to the frame
add(clockPanel, BorderLayout.NORTH);
add(ButtonPanel, BorderLayout.CENTER);
add(ElapsedPanel, BorderLayout.SOUTH);
}

private class startListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//start clock time
timer.start();
}
}

private class stopListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//stop clock time
timer.stop();
}
}

private class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//set current time and paint clock to display current time
clock.setCurrentTime();
clock.repaint();
}
}

//main method
public static void main(String[] args)
{
//create a JFrame instance
JFrame frame = new ClockAnimation();

//set title of the frame
frame.setTitle("My Clock");
//set location of the frame to center
frame.setLocationRelativeTo(null);
//set frame to close on exit
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//set frame to visable
frame.setVisible(true);
//set components to fit in frame
frame.pack();
}
}


public class ElapsedPanel {
   int startTime;
   double currentElapsedTime;
   double endElapsedTime;

   void start()
   {
   ElapsedPanel timer = null;
   timer.start();
   startTime = (int) System.currentTimeMillis();
   }

   void stop()
   {
   ElapsedPanel timer;
   timer.stop();
   Object elapsedTime = getElapsedTime();
   }

   void getElapsedTime() //Could be called apart from the stop() function to
   //get the elapsed time without stopping the timer
   {
   currentElapsedTime = (System.currentTimeMillis() - startTime)/1000;
   }
  
   String toStandardTime(double elapsedTime)
   {
   int hours = 0;
   int minutes = 0;
   int seconds = 0;
   String formattedTime;

   minutes = (int) t/60;
   seconds = (int) t%60;
   hours = (int) minutes/60;
   minutes = (int) minutes%60;

   formattedTime = hours + ":" + minutes + ":" + seconds;
   return formattedTime;
   }
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote