问答题

本题中定义了一个简单的计算器,可以进行基本的四则运算。程序中包含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());

【参考答案】

第1处:btn.addActionListener(this)
第2处:Double.parseDouble(......

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

问答题
本题的功能是用文本框来设定表盘中指针的位置。窗口中有一个画板和两个文本框,画板中绘制了一个表盘和时针、分针,通过文本框分别设定“时”和“分”,表盘中的时针和分针就会指到对应的位置上。 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;