0

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

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

} 
4

2 回答 2

1

首先看一下使用文本 API

但基本的东西是这样的

String text = "You're Name Here";
FontMetrics fm = g.getFontMetrics();
int x = (getWidth() - fm.stringWidth(text)) / 2;
int y = ((getHeight()- fm.getHeight()) / 2) + fm.getAscent();
g.drawString(text, x, y);

有关“垂直居中文本”概念的比较,请查看此Previous Question

于 2013-11-07T05:03:44.737 回答
0

尝试将此添加到您的底部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);
于 2013-11-07T05:05:30.387 回答