0

クロックが開始された時刻、クロックが停止された時刻、および開始から停止までの経過時間を表示するパネルを ClockAnimation クラスに追加したいと考えています。時:分:秒の形式にしたいです。任意のヘルプをいただければ幸いです。

私のClockAnimationクラス:

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();
   }
}

私の ClockAnimation クラスは私の StillClock クラスを使用します:

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

public class StillClock extends JPanel
{
   //create variables for StillClock
   public int hour;
   private int minute;
   private int second;

   //create a clock with current time
   public StillClock()
   {
  setCurrentTime();
   }

   //create a clock with specified time
   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 new hour
   public void setHour(int hour)
   {
      this.hour = hour;
  repaint();
   }

    //return minutes
   public int getMinute()
   {
      return minute;
   }

     //set new minute
   public void setMinute(int minute)
   {
      this.minute = minute;
      repaint();
   }

    //return seconds
   public int getSecond()
   {
      return second;
   }

     //set new second
   public void setSecond(int second)
   {
      this.second = second;
      repaint();
   }

   //draw the clock 
   protected void paintComponent(Graphics g)
   {
  super.paintComponent(g);

  int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);
  int xCenter = getWidth()/ 2;
  int yCenter = getHeight() / 2;

   //draw clock circle
  g.setColor(Color.BLACK);
  g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);

  g.drawString("12", xCenter - 5, yCenter - clockRadius + 13);
  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 seconds 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.drawLine(xCenter, yCenter, xSecond, ySecond);
  g.setColor(Color.red);

   //draw minutes 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.drawLine(xCenter, yCenter, xMinute, yMinute);
  g.setColor(Color.lightGray);

   //draw hours hand
  int hLength = (int)(clockRadius * 0.8);
  int xHour = (int)(xCenter + hLength * Math.sin(hour * (2 * Math.PI/ 60)));
  int yHour = (int)(yCenter - hLength * Math.cos(hour * (2 * Math.PI/ 60)));
  g.drawLine(xCenter, yCenter, xHour, yHour);
  g.setColor(Color.darkGray);
   }

     //set current time to StillClock variables
   public void setCurrentTime()
   {
   //construct calendar for current time and date
  Calendar calendar = new GregorianCalendar();

   //set current time
  this.hour = calendar.get(Calendar.HOUR_OF_DAY);
  this.minute = calendar.get(Calendar.MINUTE);
  this.second = calendar.get(Calendar.SECOND);
   }

 //get dimensions of JPanel
   public Dimension getPreferredSize()
   {
  return new Dimension(200, 200);
   }
}

考えられることはほとんどすべて試しました。これに対する私の課題は、これらの時間を表示せずに達成されましたが、これを追加する方法を学ぶのはクールだと思います. ありがとう、サマンサ

4

1 に答える 1