📄 calculator.java
字号:
/*Java lab exp4
*mxr@software.hit class 5 2004-11-13 10:12
*MutilpTable.java
*using java.awt and javax.swing pakage
<applet code=Calculator.class height=200 width=250>
</applet>
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.event.KeyEvent;
public class Calculator extends Applet implements ActionListener, KeyListener
{
final int MAX_INPUT_LENGTH = 17;
final int INPUT_MODE = 0;
final int RESULT_MODE = 1;
final int ERROR_MODE = 2;
int displayMode;
TextField displaytext;
boolean clearOnNextDigit;
double lastNumber;
char lastOperator;
public void init()
{
Calculator calPanel = new Calculator();
add("Center",calPanel);
}
public Calculator ()
{
super();
setLayout(new BorderLayout());
JPanel container = new JPanel();
container.setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
JPanel numberPanel = new JPanel();
numberPanel.setLayout(new GridLayout(4, 4));
addButtonToPanel (numberPanel, new JButton("7"));
addButtonToPanel (numberPanel, new JButton("8"));
addButtonToPanel (numberPanel, new JButton("9"));
addButtonToPanel (numberPanel, new JButton("/"));
addButtonToPanel (numberPanel, new JButton("4"));
addButtonToPanel (numberPanel, new JButton("5"));
addButtonToPanel (numberPanel, new JButton("6"));
addButtonToPanel (numberPanel, new JButton("*"));
addButtonToPanel (numberPanel, new JButton("1"));
addButtonToPanel (numberPanel, new JButton("2"));
addButtonToPanel (numberPanel, new JButton("3"));
addButtonToPanel (numberPanel, new JButton("-"));
addButtonToPanel (numberPanel, new JButton("."));
addButtonToPanel (numberPanel, new JButton("0"));
addButtonToPanel (numberPanel, new JButton("="));
addButtonToPanel (numberPanel, new JButton("+"));
buttonPanel.add(numberPanel);
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new BorderLayout());
addButtonToPanel (controlPanel, new JButton("BACK"),0);
addButtonToPanel (controlPanel, new JButton("+/-"),3);
addButtonToPanel (controlPanel, new JButton("AC"),3);
addButtonToPanel (controlPanel, new JButton("C"),2);
displaytext = new TextField("");
displaytext.isDisplayable();
displayResult(0);
addKeyListener(this);
controlPanel.add(displaytext,BorderLayout.NORTH);
/*container.add(controlPanel,BorderLayout.NORTH);
container.add(buttonPanel, BorderLayout.CENTER);
add("Center",container);*/
JPanel p = new JPanel();
//p.setLayout(new BorderLayout());
p.add(buttonPanel,BorderLayout.SOUTH);
p.add(controlPanel,BorderLayout.NORTH);
container.add(p);
add("Center",container);
// p.requestFocus();
//controlPanel.requestFocus();
// displaytex.requestFocus();
clearAll();
}
void setDisplayString(String s)
{
displaytext.setText(s);
}
String getDisplayString ()
{
return displaytext.getText();
}
void clearAll()
{
setDisplayString("0");
lastOperator = 0;
lastNumber = 0;
displayMode = INPUT_MODE;
clearOnNextDigit = true;
}
void clearLastEntry()
{
setDisplayString("0");
clearOnNextDigit = true;
displayMode = INPUT_MODE;
}
void displayResult(double result)
{
setDisplayString(Double.toString(result));
lastNumber = result;
displayMode = RESULT_MODE;
clearOnNextDigit = true;
}
void displayError(String errorMessage)
{
setDisplayString(errorMessage);
lastNumber = 0;
displayMode = ERROR_MODE;
clearOnNextDigit = true;
}
void addButtonToPanel(JPanel panel, JButton button)
{
panel.add(button);
button.addKeyListener(this);
button.addActionListener(this);
}
void addButtonToPanel(JPanel panel, JButton button ,int side)
{
if(side==0)
{
panel.add(button,BorderLayout.WEST);
}
if(side==1)
{
panel.add(button,BorderLayout.NORTH);
}
if(side==2)
{
panel.add(button,BorderLayout.EAST);
}
if(side==3)
{
panel.add(button,BorderLayout.CENTER);
}
button.addKeyListener(this);
button.addActionListener(this);
}
public void actionPerformed (ActionEvent e)
{
processButton(e.getActionCommand());
}
void processButton(String command)
{
if (command.equals("0")) addDigit(0);
if (command.equals("1")) addDigit(1);
if (command.equals("2")) addDigit(2);
if (command.equals("3")) addDigit(3);
if (command.equals("4")) addDigit(4);
if (command.equals("5")) addDigit(5);
if (command.equals("6")) addDigit(6);
if (command.equals("7")) addDigit(7);
if (command.equals("8")) addDigit(8);
if (command.equals("9")) addDigit(9);
if (command.equals(".")) addDecimalPoint();
if (command.equals("*")) processOperator('*');
if (command.equals("-")) processOperator('-');
if (command.equals("/")) processOperator('/');
if (command.equals("+")) processOperator('+');
if (command.equals("=")) processEquals();
if (command.equals("+/-")) processSignChange();
if (command.equals("AC")) clearAll();
if (command.equals("C")) clearLastEntry();
if (command.equals("BACK")) clearnext();
{
}
}
void clearnext()
{
String in = getDisplayString();
in = displaytext.getText();
in = in.substring(0,in.length()-1);
displaytext.setText(in);
}
double getNumberInDisplay()
{
String input = displaytext.getText();
return Double.parseDouble(input);
}
double processLastOperator() throws DivideByZeroException
{
double result = 0;
double numberInDisplay = getNumberInDisplay();
switch (lastOperator)
{
case '*':
result = lastNumber * numberInDisplay;
break;
case '+':
result = lastNumber + numberInDisplay;
break;
case '-':
result = lastNumber - numberInDisplay;
break;
case '/':
if (numberInDisplay == 0)
throw (new DivideByZeroException());
result = lastNumber / numberInDisplay;
break;
}
return result;
}
void processOperator(char op)
{
if (displayMode != ERROR_MODE)
{
double numberInDisplay = getNumberInDisplay();
if (lastOperator != 0)
{
try
{
double result = processLastOperator();
displayResult(result);
lastNumber = result;
}
catch (DivideByZeroException e)
{
displayError("Division by zero!");
}
}
else
{
lastNumber = numberInDisplay;
}
clearOnNextDigit = true;
lastOperator = op;
}
}
void processEquals()
{
if (displayMode != ERROR_MODE)
{
try
{
double result = processLastOperator();
displayResult(result);
}
catch (DivideByZeroException e)
{
displayError("Division by zero!");
}
lastOperator = 0;
}
}
void processSignChange()
{
if (displayMode == INPUT_MODE)
{
String input = getDisplayString();
if (input.length() > 0)
{
if (input.indexOf("-") == 0)
setDisplayString(input.substring(1));
else
setDisplayString("-" + input);
}
}
else if (displayMode == RESULT_MODE)
{
double numberInDisplay = getNumberInDisplay();
if (numberInDisplay != 0)
displayResult(-numberInDisplay);
}
}
void addDigit(int digit)
{
if (clearOnNextDigit)
setDisplayString("");
String inputString = getDisplayString();
if ((!inputString.equals("0") || digit > 0) && inputString.length() < MAX_INPUT_LENGTH)
{
setDisplayString(inputString + digit);
}
displayMode = INPUT_MODE;
clearOnNextDigit = false;
}
void addDecimalPoint()
{
displayMode = INPUT_MODE;
if (clearOnNextDigit)
setDisplayString("");
String inputString = getDisplayString();
if (inputString.indexOf(".") < 0)
setDisplayString(new String(inputString + "."));
}
public void keyPressed(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
String command;
char keyChar = e.getKeyChar();
if (keyChar == KeyEvent.VK_BACK_SPACE)
{
command = new String("BACK");
}
else if (keyChar == KeyEvent.VK_ENTER)
{
command = new String("=");
}
else if (keyChar == KeyEvent.VK_ESCAPE)
{
command = new String("C");
}
else
{
byte bytes[] = {(byte)keyChar};
command = new String(bytes);
}
processButton(command);
}
public static void main(String args[])
{
NFrame frame = new NFrame();
Container conTainer;
conTainer = frame.getContentPane();
conTainer.setLayout (new BorderLayout());
Calculator calculator = new Calculator();
calculator.init();
calculator.start();
conTainer.add("Center",calculator);
frame.setTitle("Calcutator");
frame.setSize(180,210);
frame.setVisible(true);
}
}
class DivideByZeroException extends Exception
{
DivideByZeroException()
{
super("Divide by zero");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -