我的时钟显示正确,但是我需要在时钟中间写上我的名字,但我不知道该怎么做。另外,如何在程序每次运行时更改时针和分针?我认为我需要使小时和分钟等于随机数生成器吗?

class StillClock extends JPanel
{
   private int hour;
   private int minute;
   private int second;

   private boolean hourHandVisible = true;
   private boolean minuteHandVisible = true;
   private boolean secondHandVisible = true;


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

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

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

/** 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);

// Draw minute hand
   if (minuteHandVisible)
   {
   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
   if (hourHandVisible)
   {
   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);
   }

// }// Display hours on the clock
   g.setColor(Color.red);
   for (int i = 0; i < 12; i++)
   {
    int x = (int)(xCenter + 0.8 * clockRadius * Math.sin (i*(2 * Math.PI / 12)));
    int y = (int)(yCenter - 0.8 * clockRadius * Math.cos (i*(2 * Math.PI / 12)));
    g.drawString("" + ((i == 0) ? 12 : i), x, y);
   }

}

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


   public Dimension getPreferredSize()
   {
   return new Dimension(800, 800);
   }

   public boolean isHourHandVisible()
   {
   return hourHandVisible;
   }

   public boolean isMinuteHandVisible()
   {
   return hourHandVisible;
   }

   public void setHourHandVisible(boolean hourHandVisible)
   {
   this.hourHandVisible = hourHandVisible;
   repaint();
   }

   public void setMinuteHandVisible(boolean minuteHandVisible)
   {
   this.minuteHandVisible = minuteHandVisible;
   repaint();
   }

}

最佳答案

尝试将其添加到paintComponent()的底部

// get the FontMetrics for the current font
FontMetrics fm = g.getFontMetrics();

// find the center location to display
int stringWidth = fm.stringWidth("MyName");
int stringAccent = fm.getAscent();

// get the position of the leftmost character in the baseline
int xCoordinate = getWidth() / 2 - stringWidth / 2;
int yCoordinate = getHeight() / 2 + stringAccent / 2;

g.drawString("MyName", xCoordinate, yCoordinate);

09-11 18:58
查看更多