📄 jisuanqi.java
字号:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Jisuanqi extends JFrame implements ActionListener{
Result result = new Result(); //定义text的面板
Number number = new Number(); //定义按钮面板
//当点击按钮+、-、*、/时,com = true
boolean com = false;
//当i=0时说明是我们第一次输入,字符串text不会累加
int i = 0;
//存放text的内容
String text = "";
//存放点击按钮+、-、*、/之前的数值
double defbutton = 0;
//+、-、*、/的代号分别为1,2,3,4
int symbol = 0;
//构造函数
Jisuanqi(){
super("刘刚");//定义标题
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设定关闭窗体时退出程
JPanel pane=new JPanel();//定义主面板
pane.setLayout(new BorderLayout());
setBounds(380,220,200,100);
pane.add(result, BorderLayout.NORTH);
pane.add(number, BorderLayout.CENTER);
//在屏幕中显示的位置与大小
//设置监听
number.zero.addActionListener(this);
number.one.addActionListener(this);
number.two.addActionListener(this);
number.three.addActionListener(this);
number.four.addActionListener(this);
number.five.addActionListener(this);
number.six.addActionListener(this);
number.seven.addActionListener(this);
number.eight.addActionListener(this);
number.nine.addActionListener(this);
number.czero.addActionListener(this);// 置0
number.plus.addActionListener(this);// +
number.sub.addActionListener(this);// -
number.equal.addActionListener(this);// =
number.mul.addActionListener(this);// *
number.div.addActionListener(this);// 除
number.two_to_Hex.addActionListener(this);//2进制转换10进制
number.sqrt.addActionListener(this);//求开根号
number.love_U.addActionListener(this);//just love U
number.point.addActionListener(this);//小数点
setContentPane(pane);
pack(); //初始化窗体大小为正好盛放所有按钮
}
//处理按钮触发的事件
public void actionPerformed(ActionEvent e){
if (e.getSource() == number.one){
if (com || i == 0) {
result.text.setText("1");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "1");
}
}
else if (e.getSource() == number.two){
if (com || i == 0) {
result.text.setText("2");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "2");
}
}
else if (e.getSource() == number.three){
if (com || i == 0) {
result.text.setText("3");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "3");
}
}
else if (e.getSource() == number.four){
if (com || i == 0) {
result.text.setText("4");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "4");
}
}
else if (e.getSource() == number.five){
if (com || i == 0) {
result.text.setText("5");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "5");
}
}
else if (e.getSource() == number.six){
if (com || i == 0) {
result.text.setText("6");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "6");
}
}
else if (e.getSource() == number.seven){
if (com || i == 0) {
result.text.setText("7");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "7");
}
}
else if (e.getSource() == number.eight){
if (com || i == 0) {
result.text.setText("8");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "8");
}
}
else if (e.getSource() == number.nine){
if (com || i == 0) {
result.text.setText("9");
com = false;
i = 1;
}
else {
text = result.text.getText();
result.text.setText(text + "9");
}
}
else if (e.getSource() == number.zero){//处理0要注意
if (com || i == 0) {
result.text.setText("0");
com = false;
i = 1;
}
else {
text=result.text.getText( );
if(Float.parseFloat(text) > 0 || Float.parseFloat(text) < 0){
result.text.setText(text + "0");
}
else if(text.trim().indexOf(".") == -1){
result.text.setText(text);
}
else{
result.text.setText(text+"0");
}
}
}
else if (e.getSource() == number.point){
if (com || i == 0){
result.text.setText("0.");
com=false;
i=1;
}
else{
text=result.text.getText();
if (text.trim().indexOf(".") == -1){
result.text.setText(text+".");
}
else{
result.text.setText(text);
}
}
}
else if (e.getSource() == number.czero){//置0键处理
result.text.setText("0");
i=0;
com=true;
}
//下面为运算获得的第一个数
else if (e.getSource() == number.plus) { //获得点击+之前的数值
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
symbol = 1;
}
else if (e.getSource() == number.sub) { //获得点击-之前的数值
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
symbol = 2;
}
else if (e.getSource() == number.mul) { //获得点击*之前的数值
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
symbol = 3;
}
else if (e.getSource() == number.div) { //获得点击 / 之前的数值
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
symbol = 4;
}
//其他的进制转换基本原理都一样,所以就弄了一个2进制转换为16进制
//要注意输入一定要是二进制的数
else if (e.getSource() == number.two_to_Hex) { //进制转换
com = true;
i = 0;
String text1=result.text.getText( );
for(int i=0;i<text1.length();i++){
char c = text1.charAt(i);
if(c =='1'|| c=='0'|| c=='.'){
int ad0=Integer.parseInt(result.text.getText(),2);
String ad2=Integer.toHexString(ad0);
result.text.setText(ad2+" ");
}
else{
result.text.setText("ERROR! 2进制转换16进制只能输入0或1 ! ");
}
}
}
else if (e.getSource() == number.sqrt) { //获得点击 开根号 之前的数值
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
double ad=Math.sqrt(defbutton);
result.text.setText(ad+" ");
}
else if (e.getSource() == number.love_U) { //
com = true;
i = 0;
result.text.setText("JUST FOR LOVE ");
}
else if (e.getSource() == number.equal){
switch(symbol){//求值
case 1:
{
double ad =
defbutton + Double.parseDouble(result.text.getText());
result.text.setText(ad + " ");
i = 0;
text = "";
break;
}
case 2:
{
double ad =
defbutton - Double.parseDouble(result.text.getText());
result.text.setText(ad + " ");
i = 0;
text = "";
break;
}
case 3:
{
double ad =
defbutton * Double.parseDouble(result.text.getText());
result.text.setText(ad + " ");
i = 0;
text = "";
break;
}
case 4:
{
double ad =
defbutton / Double.parseDouble(result.text.getText());
result.text.setText(ad + " ");
i = 0;
text = "";
break;
}
}
}
}
public static void main(String[] args) {
Jisuanqi loveyou = new Jisuanqi();
loveyou.show();
}
}
} //计算器显示结果的窗体
class Result extends JPanel {
//text先是输入和结果
JTextField text = new JTextField(20);
Result() { //讲输入的数字或得到的结果在text的右边显示
text.setHorizontalAlignment(SwingConstants.RIGHT);
text.enable(true); //文本框不能编辑
setLayout(new BorderLayout()); //设定布局管理器边框布局
add(text, BorderLayout.NORTH); //text放置在窗体的中间
}
}
class Number extends JPanel {//计算器数字按钮定义面板
JButton zero = new JButton("0");
JButton one = new JButton("1");
JButton two = new JButton("2");
JButton three = new JButton("3");
JButton four = new JButton("4");
JButton five = new JButton("5");
JButton six = new JButton("6");
JButton seven = new JButton("7");
JButton eight = new JButton("8");
JButton nine = new JButton("9");
JButton plus = new JButton("+");
JButton sub = new JButton("-");
JButton mul = new JButton("*");
JButton div = new JButton("/");
JButton equal = new JButton("=");
JButton czero = new JButton("清零");
JButton point = new JButton(".");
JButton love_U=new JButton("love_U");
JButton sqrt=new JButton("sqrt");
JButton two_to_Hex=new JButton("进制");//10进制转换16进制
Number(){
setLayout(new GridLayout(5, 4, 1, 1)); //定义布局管理器为网格布局
setBackground(Color.red); //设置背景颜色
add(one); //添加按钮
add(two);
add(three);
add(plus);
add(four);
add(five);
add(six);
add(sub);
add(seven);
add(eight);
add(nine);
add(mul);
add(zero);
add(div);
add(point);
add(czero);
add(love_U);
add(two_to_Hex);
add(sqrt);
add(equal);
}
} //计算器显示结果的窗体
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -