📄 计算器.java
字号:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.BorderFactory;
public class Calculator {
public static void main(String []args){ //程序入口
CalculatorFrame CalculatorFrame=new CalculatorFrame(); //创建CalculatorFrame类实例
}
}
/**************************************************************
* 界面类
*************************************************************/
class CalculatorFrame extends JFrame implements ActionListener{
JRadioButton jRadioButton; //声明窗口中用到的各种组件
JTextField displayTextField;
JButton backButton,clearButton,button;
JPanel textPanel,controlPanel,mainPanel,digitalPanel,jinzhiPanel;
double result = 0;
String operator = "="; //保存运算符的变量
boolean start = true; //设置输入标志位
Calculate calculate;
String getValue="";
public CalculatorFrame(){
this.setTitle("计算器"); //设置计算器标题
this.setLayout(new BorderLayout()); //设置布局管理器
calculate=new Calculate(); //创建Calculate类的一个对象
/*****************************************************
* 结果显示面板
*****************************************************/
textPanel=new JPanel(); //创建显示面板
displayTextField=new JTextField("0",24); //创建显示文本框
textPanel.add(displayTextField); //将文本框添加到显示面板上
this.add(textPanel,"North");
controlPanel=new JPanel(); //创建控制面板
controlPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
backButton=new JButton("退格"); //创建"退格"按钮
clearButton=new JButton("清空"); //创建"清空"按钮
backButton.addActionListener(this); //为按钮添加事件监听器
clearButton.addActionListener(this);
backButton.setFont(new Font("SansSerif", Font.PLAIN, 12));//设置字体
clearButton.setFont(new Font("SansSerif", Font.PLAIN, 12));
controlPanel.add(backButton); //将按钮添加到面板上
controlPanel.add(clearButton);
this.add(controlPanel,"Center"); //将面板添加到框架窗口中
/******************************************************
* 主面板
******************************************************/
mainPanel=new JPanel(); //创建主面板并设置布局管理
mainPanel.setLayout(new BorderLayout());
jinzhiPanel=new JPanel();
jinzhiPanel.setLayout(new FlowLayout(FlowLayout.CENTER,4,4));
String jRadioButtons[]={"十进制","二进制","八进制","十六进制"};
ButtonGroup buttonGroup=new ButtonGroup(); //创建单选按钮组
for(int i=0;i<jRadioButtons.length;i++){ //用循环语句生成按钮
if(i==0){
jRadioButton=new JRadioButton(jRadioButtons[i],true);
}
jRadioButton=new JRadioButton(jRadioButtons[i]); //创建单选按钮
jRadioButton.setFont(new Font("SansSerif", Font.PLAIN, 12));
jRadioButton.setForeground(Color.BLUE);
jRadioButton.addActionListener(this); //添加事件监听器
buttonGroup.add(jRadioButton); //将单选按钮添加到组里
jinzhiPanel.add(jRadioButton);
}
digitalPanel=new JPanel();
digitalPanel.setLayout(new GridLayout(4,4,5,5)); //将数字面板布局管理器设置为
String buttons="789/456*123-0.=+"; //GridLayout,4行4列,间隔5像素
for (int i = 0; i < buttons.length(); i++) {
button = new JButton(buttons.substring(i, i + 1));
button.setForeground(Color.BLUE); //设置按钮文本颜色为蓝色
button.addActionListener(this); //为按钮注册事件监听器
digitalPanel.add(button); //将按钮放置在数字面板上
}
mainPanel.add(jinzhiPanel,"North"); //将进制转换面板放置在顶部
mainPanel.add(digitalPanel,"Center"); //将数字面板放置在主面板的中部
this.add(mainPanel,"South"); //将主面板放置在框架底部
/******************************************************
* 界面显示
******************************************************/
setLocation(200,100); //设置界面出现位置
setSize(285,260); //设置界面大小
setResizable(false); //将界面大小设置为不可编辑
setVisible(true); //设置界面可见
}
public void actionPerformed(ActionEvent evt) { //响应用户点击按钮事件
String inputString = evt.getActionCommand();
if ('0' <= inputString.charAt(0) && inputString.charAt(0) <= '9' || inputString.equals(".")) {
if (start)
displayTextField.setText(inputString); //在文本框中显示用户输入
else
displayTextField.setText(displayTextField.getText() + inputString);
start = false;
getValue=displayTextField.getText();
}
else {
if (start) {
if (inputString.equals("-")) {
displayTextField.setText(inputString); //显示用户输入的操作符或数字
start = false;
}
else operator = inputString; //得到用户选择的运算符
}
else {
double input = Double.parseDouble(displayTextField.getText());//取得用户输入并转换格式
result=calculate.calculated(input,operator); //调用Calculator类的计算方法获得结果
operator = inputString; // 用operater保存用户要进行的操作的操作符
start = true;
displayTextField.setText(Double.toString(result)); //将结果显示在文本框中
}
}
if(inputString.equals("二进制")) {
displayTextField.setText(calculate.toBinary(getValue)); //调用计算类的方法toBinary()
}
else if(inputString.equals("十进制")) {
displayTextField.setText(getValue);
}
else if(inputString.equals("八进制")) {
displayTextField.setText(calculate.toOctal(getValue)); //调用计算类的方法toOctal()
}
else if(inputString.equals("十六进制")) {
displayTextField.setText(calculate.toHex(getValue)); //调用计算类的方法toHex()
}
else if(inputString.equals("退格")) {
String getStr=displayTextField.getText();
if(getStr!=""){
String subStr=getStr.substring(0,getStr.length()-1); //得到退格后的 字符串
displayTextField.setText(subStr); //显示退格后的字符串
}
}
else if(inputString.equals("清空")) {
displayTextField.setText(""); //将显示文本框清空
}
}
}
/***********************************************************
* 计算类
***********************************************************/
class Calculate{
public double result=0; //存放中间结果及最终结果
public Calculate() {
}
public double calculated(double inputNum,String operator){
if (operator.equals("+")) result += inputNum; //根据用户选择的运算符执行不同的运算
else if (operator.equals("-")) result -= inputNum;
else if (operator.equals("*")) result *= inputNum;
else if (operator.equals("/")) result /= inputNum;
else if (operator.equals("=")) result = inputNum;
return result; //返回运算结果
}
public String toBinary(String getValue){ //转换为二进制
return Integer.toBinaryString(Integer.parseInt(getValue));
}
public String toOctal(String getValue){ //转换为八进制
return Integer.toOctalString(Integer.parseInt(getValue));
}
public String toHex(String getValue){ //转换为十六进制
return Integer.toHexString(Integer.parseInt(getValue));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -