问答题

本题程序的功能是定义一个简单的计算器,可以进行基本的四则运算。程序中布局了16个按钮用来表示数字0~9及运算符和点号,程序顶部的文本框用来显示运算数及结果。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class simple

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("simple");
setSize(220,180);
addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent e)

System.exit(0);

);
Container contentPane=getContentPane();
contentPane.add(new CalculatorPanel());

【参考答案】

btn.addActionListener(this)。
Double.parseDouble(display......

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

问答题
本题程序的功能是用键盘上的方向键来控制直线的绘制方向。如果一直按向上的方向键,则在窗口中从焦点开始向上缓慢绘制直线,按其他方向的方向键也会向对应的方向缓慢地绘制直线。如果按下Shift键,绘制直线的速度会加快。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。 import java.awt.*; import java.awt.geom.*; import java.util.*; import java.awt.event.*; import javax.swing.*; public class advance public static void main(String[] args) SketchFrame frame = new SketchFrame(); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); frame,show (); class SketchFrame extends JFrame public SketchFrame() setTitle( advance ); setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); SketchPanel panel = new SketchPanel(); Container contentPane = getContentPane(); contentPane.add(panel); public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 200; class SketchPanel extends JPanel ______; last = new Point2D.Double(100,100); lines = new ArrayList(); KeyHandler listener = new KeyHandler(); ______; setFocusable(true); public void add(int dx,int dy) Point2D end = new Point2D.Double(last.getX()+ dx,last.getY() + dy); Line2D line = new Line2D.Double(last,end); lines.add(line); repaint(); last = end; public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; for (int i = 0; i < lines.size(); i++) g2 .draw ((Line2D) lines .get (i)); private Point2D last; private ArrayList lines; private static final int SMALL INCREMENT = i; private static final int LARGE_INCREMENT = 5; private class KeyHandler implements KeyListener public void keyPressed(KeyEvent event) ______; int d; if (event.isShiftDown()) d = LARGE_INCREMENT; else d = SMALL_INCREMENT; if(keyCode == KeyEvent.VK_LEFT) add(-d,0); else if(keyCode == KeyEvent.VK_RIGHT) add(d,0); else if(keyCode == KeyEvent.VK_UP) add(0,-d); else if(keyCode == KeyEvent.VK DOWN) add(0,d); public void keyReleased(KeyEvent event) public void keyTyped(KeyEvent event) char keyChar = event.getKeyChar(); int d; if (Charaeter.isUpperCase(keyChar)) d = LARGE_INCREMENT; keyChar = Character.toLowerCase(keyChar); else d = SMALL_INCREMENT;