?? calculator.java
字號(hào):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//該類實(shí)現(xiàn)計(jì)數(shù)器窗口
public class Calculator extends JFrame {
private Container container; //設(shè)置容器對(duì)象
private GridBagLayout layout; //設(shè)置布局對(duì)象
private GridBagConstraints constraints;//控制組件的位置
private JTextField displayField;//計(jì)算結(jié)果顯示區(qū)
private String lastCommand;//保存+,-,*,/,=命令
private double result;//保存計(jì)算結(jié)果
private boolean start;//判斷是否為數(shù)字的開始
//構(gòu)造函數(shù)
public Calculator() {
super("Calculator"); //使用super調(diào)用父類的方法
container=getContentPane();
//建立劃分方法
layout=new GridBagLayout();
//設(shè)置劃分方法
container.setLayout(layout);
constraints=new GridBagConstraints(); //初始化組件容器,布局,格式
start=true; //初始化參數(shù)為默認(rèn)值,假設(shè)為輸入
result=0; //初始化
lastCommand = "="; //初始化
displayField=new JTextField(20); //設(shè)置結(jié)果顯示框
displayField.setHorizontalAlignment(JTextField.RIGHT); //右對(duì)齊
constraints.gridx=0;
constraints.gridy=0;
constraints.gridwidth=4;
constraints.gridheight=1;
constraints.fill=GridBagConstraints.BOTH;
constraints.weightx=100;
constraints.weighty=100;
layout.setConstraints(displayField,constraints);
container.add(displayField); //設(shè)置所包含的組建的單元格
//格點(diǎn)的橫縱坐標(biāo)為(0,0),寬高為(4,1)
// 填充方式為雙向,全部填滿(100象素)
// 并將格式應(yīng)用于組件
//定義Insert和Command兩類事件監(jiān)聽器
ActionListener insert = new InsertAction(); //輸入數(shù)字的監(jiān)聽
ActionListener command = new CommandAction(); //計(jì)算的監(jiān)聽
//加入按鈕
addButton("Backspace",0,1,2,1,insert); //清除一個(gè)數(shù)字
addButton("CE",2,1,1,1,insert); //清除
addButton("√",3,1,1,1,command); //開根號(hào)
addButton("7",0,2,1,1,insert); //數(shù)字按鈕,下同
addButton("8",1,2,1,1,insert);
addButton("9",2,2,1,1,insert);
addButton("/",3,2,1,1,command); //除號(hào)
addButton("4",0,3,1,1,insert);
addButton("5",1,3,1,1,insert);
addButton("6",2,3,1,1,insert);
addButton("*",3,3,1,1,command); //乘號(hào)
addButton("1",0,4,1,1,insert);
addButton("2",1,4,1,1,insert);
addButton("3",2,4,1,1,insert);
addButton("-",3,4,1,1,command); //減號(hào)
addButton("0",0,5,1,1,insert);
addButton("+/-",1,5,1,1,insert);//只顯示"-"號(hào),"+"沒有實(shí)用價(jià)值 ,輸入負(fù)數(shù)
addButton(".",2,5,1,1,insert); //小數(shù)點(diǎn)
addButton("+",3,5,1,1,command); //加號(hào)
addButton("=",0,6,4,1,command); //等于號(hào)
//并設(shè)置了這一系列按鈕的位置,大小以及響應(yīng)事件
setSize(300,300);
setVisible(true);
//設(shè)置組件的大小和可是化
}
private void addButton(String label,int row,int column,int with,int height,ActionListener listener) {
//該方法給組件添加按鈕
JButton button=new JButton(label);
constraints.gridx=row;
constraints.gridy=column;
constraints.gridwidth=with;
constraints.gridheight=height;
constraints.fill=GridBagConstraints.BOTH;
//上為設(shè)置按鈕位置和大小(單位為格點(diǎn)數(shù),填充方式為雙向)
button.addActionListener(listener);
layout.setConstraints(button,constraints);
container.add(button);
//為按鈕指定事件監(jiān)聽器和格式,并將按鈕加入組件容器
}
private class InsertAction implements ActionListener //insert事件監(jiān)聽器
{
public void actionPerformed(ActionEvent event)//負(fù)責(zé)監(jiān)聽事件,并執(zhí)行對(duì)應(yīng)操//作
{
String input=event.getActionCommand();
if (start) {
displayField.setText("");
start=false; //若輸入為數(shù)字,則屏幕顯示該數(shù)字,并設(shè)置下一個(gè)輸入為命令
if(input.equals("+/-"))
displayField.setText(displayField.getText()+"-"); //按下“+/-”,屏幕上顯示為負(fù)
//號(hào),輸入負(fù)數(shù)
}
if(!input.equals("+/-")) {
if(input.equals("Backspace")) {
String str=displayField.getText();
if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1)); //輸入BACKSPACE,執(zhí)行退//格操作
}else if(input.equals("CE")||input.equals("C")) {
displayField.setText("0"); //輸入CE時(shí),屏幕顯示為0,作清零操作
start=true;
}else
displayField.setText(displayField.getText()+input); //其余情況顯示不變
}
}
}
private class CommandAction implements ActionListener // Command事件監(jiān)聽器接口類
{
public void actionPerformed(ActionEvent evt)//監(jiān)聽事件,執(zhí)行對(duì)應(yīng)操作
{
String command=evt.getActionCommand(); //獲取事件
if(start) {
lastCommand=command; //若輸入是數(shù)字,則無需處理繼續(xù)監(jiān)聽
}else {
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command;
start=true; //調(diào)入是命令,則調(diào)用calculate()方法進(jìn)行計(jì)算,然后繼續(xù)監(jiān)聽
}
}
}
public void calculate(double x)//該方法實(shí)現(xiàn)計(jì)算功能
{
if (lastCommand.equals("+")) result+= x; //加法
else if (lastCommand.equals("-")) result-=x; //減法
else if (lastCommand.equals("*")) result*=x; //乘法
else if (lastCommand.equals("/")) result/=x; //除法
else if (lastCommand.equals("=")) result=x;//等于
else if (lastCommand.equals("√")) result=Math.sqrt(x);//平方根
displayField.setText(""+ result); //輸出結(jié)果
}
public static void main(String []args) {
Calculator calculator=new Calculator(); //打開新的計(jì)數(shù)器組件窗口
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關(guān)閉窗口
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -