问题 问答题

请完成下面的程序:实现一个可以每秒跳动的时钟。运行如下图所示。请填写横线处的内容。 注意:请勿改动main主方法和其他已有语句内容,仅在下划线处填入适当的语句。 import javax.swing.*; import java.awt.*; import java.awt.event.*;

import java.util.*; public class Example2_12 extends JFrame (1) implements Runnable { Thread thread1; Color handColor; Color numberColor; JLabel jlabell = new JLabel(); public Example2_12() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { getContentPane().add(jlabell, BorderLayout. SOUTH); } catch (Exception e) { System.out.println(e.getMessage()); } } public static void main(String args[]) { Example2 12_clock1 = new Example2_12(); clock1.init(); clock1.start(); clock1.setSize(260, 230); clock1.setResizable(false); clock1.show(); } public void init() { int x, y; handColor = Color.blue; numberColor = Color.darkGray; setBackground(Color.white); } public void paint (Graphics g) { int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xpoint, ypoint; String today; Calendar c1 = ______; s = c1.get(Calendar.SECOND); m = c1.get(Calendar.MINUTE); h = c1.get(Calendar.HOUR); int day, month, year, weekday; day = c1.get(Calendar.DATE); month = c1.get(Calendar.MONTH) + 1; year = c1. get (Calendar. YEAR); weekday = c1.get (Calendar. DAY_OF_WEEK); jlabell.setText("Today is "+ year + "/" + month + "/" + day + "/ "+ "Time:" + h + ":" + m + ":" + s); xpoint = 130; ypoint = 100; xs =(int) (Math.cos(s * 3.14f / 30 - 3.14f / 2) * 45 + xpoint); ys =(int) (Math.sin(s * 3.14f / 30 - 3.14f / 2) * 45 + ypoint); xm =(int) (Math.cos (m * 3.14f / 30 - 3.14f / 2) * 40 + xpoint); ym =(int) (Math.sin(m * 3.14f / 30 - 3.14f / 2) * 40 + ypoint); xh =(int) (Math.cos( (h * 30 + m / 2) * 3.14f / 180 - 3.14f / 2) * 30 + xpoint); yh =(int) (Math.sin( (h * 30 + m / 2) * 3.14f / 180 - 3.14f / 2) * 30 + ypoint); g.setColor (handColor); g.clearRect(0, 0, 260, 200); g.drawOval(xpoint / 2 + 10, ypoint / 2 - 5, 110, 110); g.setColor(numberColor); g.drawString("9", xpoint - 45, ypoint + 3); g.drawString("3", xpoint + 40, ypoint + 3); g.drawString("12", xpoint - 5, ypoint - 37); g.drawString("6", xpoint - 3, ypoint + 45); g.setColor(getBackground ( ) ); g.setColor(numberColor); g.drawString(" ", 5, 125); g.drawLine(xpoint, ypoint, xs, ys); g.setColor(handColor); g.drawLine(xpoint, ypoint, xm, ym); g.drawLine(xpoint, ypoint, xh, xh); } public void start() { thread1 = new Thread(this); thread1. ______; } public void stop () { thread1=null; } public void update (Graphics g) { paint (g); } public void run () { Thread me = Thread. currentThread (); while (thread1 == me) { try { Thread. currentThread ( ) . sleep ( 100 ); }catch (InterruptedException e) { e.printStackTrace(); } repaint ( ); } } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) System.exit(0); } }

答案

参考答案:

解析:①Calendar.getInstance()②start() 本题主要考查线程和日历类的知识。在图形程序处理中,经常会用到多线程。使用多线程的类必须实现Runnable,接口,Thread类已经实现了Runnable接口,其子类自动实现了此类。要开始一个线程,应调用该类的start方法(第2个空)。这时Java会自动开始在该线程中调用该类的run方法。另外,在Java中,有的类只能有一个实例,不能创建它的多个实例对象。这在设计模式中叫做Singleton(单例)模式。Calendar类就是这样的类,它只能通过 getInstance方法得到这个实例对象(第1个空)。

单项选择题 A1/A2型题
判断题