问答题

本题的功能是用文本框来设定表盘中指针的位置。窗口中有一个画板和两个文本框,画板中绘制了一个表盘和时针、分针,通过文本框分别设定“时”和“分”,表盘中的时针和分针就会指到对应的位置上。
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.event.*;
public class java3
public static void main(String[]args)
TextTestFrame frame=new TextTestFrame();
frame.setDefauhCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();

class TextTestFrame extends JFrame
public TextTestFrame()
setTitle("java3");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
Container contentPane=getContentPane();
DocumentListener listener=new DocurnentListener();
JPanel panel=new JPanel();
hourField=new JTextField("12",3);
panel.add(hourField);
hourField.getDocument().addDocumentListener(this);
minuteField=new JTextField("00",3);
panel.add(minuteField);
minuteField.getDocument().addDocumentListener(listener);
contentPane.add(panel,BorderLayout.SOUTH);
clock=new ClockPanel();
contentPane.add(clock,BorderLayout.CENTER);
public void setClock()
try
int hours
=Integer.parseInt(hourField,getText().trim());
int minutes
=Integer.parseInt(minuteField.getText().trim());
clock.setTime(hours,minutes);
catch(NumberFormatException e)
public static final int DEFAULT_WIDTH=300;
public static final int DEFAULT_HEIGHT=300;
private JTextField hourField;
private JTextField minuteField;
private ClockPanel clock;
private class clockFieldListener extends DocumentListener
public void insertUpdate(DocumentEvent e)setClock();
public void removeUpdate(DocumentEvent e)setClock();
public void changedUpdate(DocumentEvent e)
class ClockPanel extends JPanel
public void paintComponent(Graphics g)
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
Ellipse2D circle
=new Ellipse2D.Double(0,0,2*RADIUS,2*RADIUS);
g2.draw(circle);
double hourAngle
=Math.toRadians(90-360*minutes/(12*60));
drawHand(g2.hourAngle,HOUR_HAND_LENGTH);
double minuteAngle
=Math.toRadians(90-360*minutes/60);
drawHand(g2,minuteAngle,MINUTE_HAND_LENGTH);
public void drawHand(Graphics2D g2,
double angle,double handLength)
Point2D end=new Poim2D.Double(
RADIUS+handLength*Math.cos(angle),
RADIUS-handLength*Math.sin(angle));
Point2D center=new Point2D.Double(RADIUS,RADIUS);
g2.draw(new Line2D.Double(center,end));
public void setTime(int h,int m)
minutes—h*60+m:
repaint();
private double minutes=0;
private double RADIUS=100;
private double MINUTE_HAND_LENGTH=0.8*RADIUS;
private double HOUR_HAND_LENGTH=0.6*RADIUS;

【参考答案】

第1处:DocumentListener listener=new ClockFieldListener()
......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
本题中定义了一个简单的计算器,可以进行基本的四则运算。程序中包含16个按钮用来表示0~9、+、-、*、 、=运算符和小数点,程序顶部的文本框用来显示操作数以及结果。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class java2 public static void main(String[]args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); catch(Exception e) JFrame frame=new CalculatorFrame(); frame.show(); class CalculatorPanel extends JPanel implements ActionListener private JTextField display; private JButton btn; private double arg=0; private String op= = ; private boolean start=true; public CalculatorPanel() setLayout(new BorderLayout()); display=new JTextField( 0 ); display.setEditable(false); add(display, North ); JPanel p=new JPanel(); p.setLayout(new GridLayout(4,4)); String buttons= 789 456*123-0.=+ ; for(int i=0;i<buttons.length();i++) btn=new JButton(buttons.substring(i,i+1)); p.add(btn); ______; add(p, Center ); public void actionPerformed(ActionEvent evt) String s=evt.getActionCommand(); if(’0’<=s.charAt(0)&&s.charAt(0)<=’9’|| s.equals( . )) if(start)display.setText(s); else display.setText(display.getText()+s); start=false; else if(start) if(s.equals( - )) display.setText(s); start=false; else op=s; else double x=______; calculate(x); op=s; start=true; public void calculate(double n) if(op.equals( + ))arg+=n; else if(op.equals( - ))arg--n; else if(op.equals( * ))arg*=n; else if(op.equals( ))arg =n; else if(op.equals( = ))arg=n; display.setText( +arg); class CalculatorFrame extends JFrame public CalculatorFrame() setTitle( java2 ); setSize(220,180); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); Container contentPane=getContentPane(); contentPane.add(new CalculatorPanel());