我的时钟显示正确,但我需要在中间写下我的名字,我不知道怎么做。还有如何让程序每次运行时时针和分针都改变?我假设我需要使小时和分钟等于随机数生成器?
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();
}
}