用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

界面--计算器

2015-12-18 作者: 永夜极光举报

[java]代码库

1.主程序
package s1125计算器界面;
 
import java.awt.Dimension;
import java.awt.FlowLayout;
 
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
 
public class Main1125 extends JFrame {
    public static void main(String[] args) {
        new Main1125().showjiemian(); // 出现验证界面
    }
 
    // ************************************************************************************//
    // 计算器主界面
    public void showframe() {
        this.setTitle("计算器"); // 设置窗体的标题
        this.setSize(340, 500);// 设置窗体的大小
        this.setDefaultCloseOperation(3);// 设置关闭的方式
        this.setLocationRelativeTo(null);// 设置窗体出现在屏幕中间
        this.setResizable(false);// 设置窗体不可改变大小
        this.setLayout(new FlowLayout());// 设置窗体为空布局
 
        JTextField jtf1 = new JTextField(); // 创建结果文本框对象
        jtf1.setPreferredSize(new Dimension(300, 50));// 编辑文本框大小
        jtf1.setEditable(false); // 不可调文本框大小
        jtf1.setHorizontalAlignment(JTextField.RIGHT);// 文本框向右排序
        jtf1.setText("");
 
        JTextField jtf = new JTextField(); // 创建输入的文本框对象
        jtf.setPreferredSize(new Dimension(300, 50)); // 编辑文本框大小
        jtf.setEditable(false); // 不可调文本框大小
        jtf.setHorizontalAlignment(JTextField.RIGHT); // 文本框向右排序
        jtf.setText("0");
 
        this.add(jtf1);
        this.add(jtf);
 
        // 建一个事件处理类l
        CalListener l = new CalListener();
        l.setJtf(jtf, jtf1);
        // 界面按钮
        String[] array = { "←", "ANS", "CE", "C", "7", "8", "9", "+", "4", "5",
                "6", "-", "1", "2", "3", "×", "0", ".", "÷", "=" };
 
        // 设置界面按钮的大小,排列顺序,添加按钮到窗体,给按钮添加事件
        for (int i = 0; i < array.length; i++) {
            JButton jbu = new JButton(array[i]);
            jbu.setPreferredSize(new Dimension(70, 55));
            this.add(jbu);
            jbu.addActionListener(l);
        }
 
        this.setVisible(true);
    }
 
    // ************************************************************************************//
 
    // ************************************************************************************//
    // 添加菜单栏
    public void MyMenu() {
        JMenuBar menubar = new JMenuBar(); // 创建menubar对象
        JMenu file, edit, editSon, about;// 声明JMenu类对象
        JMenuItem open, save, line, exit, copy, paste, cut, put, author, help;// 声明menuitem类对象
        // 初始菜单项
        file = new JMenu("文件(F)"); // 创建JMenu对象
        file.setMnemonic('F');
        edit = new JMenu("编辑"); // 创建JMenu对象
        editSon = new JMenu("二级菜单"); // 创建JMenu对象
        about = new JMenu("帮助"); // 创建JMenu对象
        open = new JMenuItem("打开", new ImageIcon(
                "C:/Users/Administrator/Desktop/images/2.jpg")); // 创建menuItem对象
        save = new JMenuItem("保存"); // 创建menuItem对象
        exit = new JMenuItem("关闭"); // 创建menuItem对象
        copy = new JMenuItem("复制"); // 创建menuItem对象
        paste = new JMenuItem("粘贴"); // 创建menuItem对象
        author = new JMenuItem("作者"); // 创建menuItem对象
        help = new JMenuItem("帮助"); // 创建menuItem对象
        cut = new JMenuItem("cut"); // 创建menuItem对象
        put = new JMenuItem("put"); // 创建menuItem对象
        menubar.add(file); // 将file添加到menubar中
        menubar.add(edit); // 将edit添加到menubar中
        menubar.add(about); // 将about添加到menubar中
 
        exit.addActionListener(e -> this.dispose());// 关闭按钮
 
        file.add(open); // 将open添加到file中
        file.add(save); // 将save添加到file中
        file.addSeparator();// 添加菜单栏中的横线 横线位置和添加顺序有关
        file.add(exit); // 将exit添加到file中
 
        edit.add(copy); // 将copy添加到edit中
        edit.add(paste); // 将paste添加到edit中
        edit.add(editSon); // 将editSon添加到edit中
        editSon.add(cut); // 将cut添加到edit中
        editSon.add(put); // 将put添加到edit中
 
        about.add(author); // 将author添加到about中
        about.add(help); // 将help添加到about中
        // 设置menuBar
        this.setJMenuBar(menubar);
    }
 
    // ************************************************************************************//
 
    // ************************************************************************************//
    // 验证界面(登陆界面)
    public void showjiemian() {
        this.setTitle("用户登陆"); // 设置窗体的标题
        this.setSize(200, 150); // 设置窗体的大小
        this.setDefaultCloseOperation(3); // 设置关闭的方式
        this.setLocationRelativeTo(null); // 设置窗体出现在屏幕中间
        this.setResizable(false); // 设置窗体不可改变大小
 
        FlowLayout c = new FlowLayout(); // 创建流式布局对象
        JLabel a = new JLabel("账号"); // 创建标签对象
        JLabel b = new JLabel("密码"); // 创建标签对象
        JTextField username = new JTextField(12); // 创建文本框对象
        JPasswordField password = new JPasswordField(12);// 创建密码框对象
        JButton b12 = new JButton("登陆"); // 创建按钮对象
        this.setLayout(c); // 设置布局为流式布局
 
        this.add(a); // 将标签对象添加到窗体
        this.add(username); // 将文本框对象添加到窗体
        this.add(b); // 将标签对象添加到窗体
        this.add(password); // 将密码框对象添加到窗体
        this.add(b12); // 将按钮对象添加到窗体
        b12.addActionListener(e -> {
 
            this.dispose(); // 关闭验证界面
 
            if (username.getText().equals("1")
                    && new String(password.getPassword()).equals("1")) // 验证用户名和密码如果都是1,那么就通过
                                                                         
            {
                new Main1125() {
                    {
                        showframe();
                        MyMenu();
                    }
                };
            }
 
            else {
                new Main1125().showfault(); // 显示错误提示框
            }
 
        });
 
        this.setVisible(true);// 设置窗体属性为可见
 
    }
 
    // ************************************************************************************//
 
    // ************************************************************************************//
    // 错误提示框
    public void showfault() {
        this.setTitle("错误"); // 设置窗体的标题
        this.setSize(200, 150);// 设置窗体的大小
        this.setDefaultCloseOperation(3);// 设置关闭的方式
        this.setLocationRelativeTo(null);// 设置窗体出现在屏幕中间
        this.setResizable(false);// 设置窗体不可改变大小
        this.setLocationRelativeTo(null); // 设置窗体出现位置居中
        JPanel j1 = new JPanel(); // 创建面板对象
        j1.setPreferredSize(new Dimension(0, 100)); // 设置面板大小
        JLabel a = new JLabel("账号或者密码错误,请重新输入"); // 创建错误标签对象
        JButton b = new JButton("返回登陆界面"); // 创建按钮对象
        this.add(j1); // 添加面板到窗体
        j1.add(a); // 添加标签组件到窗体
        j1.add(b); // 添加按钮组件到窗体
 
        b.addActionListener((e) -> {
            this.dispose();
            new Main1125().showjiemian();
        }); // 关掉错误界面,显示验证界面
 
        this.setVisible(true);// 设置窗体属性为可见
 
    }
    // ************************************************************************************//
 
}
 
 
2.ActionListener类
package s1125计算器界面;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
 
public class CalListener implements ActionListener{
    String text  ;              //接受使用者按下的按钮内容
    String str = "";            //str是存储运算符
    String lastnumber;          //存储上一个处理数
    String nextnumber;          //存储下一个处理数
    String result;              //存储结果
    JTextField jtf,jtf1;        //jtf显示输入框,jtf1结果框
    double d;                   //存储运算结果
    int n;                             
      
    public void setJtf(JTextField jtf,JTextField jtf1)   
    {this.jtf = jtf;                                            //传入输入文本框对象
    this.jtf1 = jtf1;}                                          //传入结果文本框对象
     
     
    public void actionPerformed(ActionEvent e){
        text = e.getActionCommand();//   e.getActionCommand()得到按钮上的字符串
        System.out.println(text); 
         
        if(text.equals("←"))
        {//如果文本框字符串长度大于1 减掉最后一位 如果长度等于1 文本框置0
            String temp = jtf.getText();
            if(temp.length()>1)
            {   String temp1;                                       
                temp1=temp.substring(temp.length()-1,temp.length());//得到最后一位字符传给temp
                if(temp1.equals("+")||temp1.equals("-")||temp1.equals("×")||temp1.equals("÷"))
                str="";            //如果最后一位字符是符号,那么"←"表示将符号清空,那么str=""
               jtf.setText(temp.substring(0,temp.length()-1));//删去最后一位substring用法是得到从0到temp.length()-1位数据     
            }
             
            else jtf.setText("0");
        }
         
        else if(text.equals("ANS"))                  //ans 调用上次的结果
        {  String k=jtf1.getText();
             
            if(k.equals(""))  jtf.setText("0");            //调用结果数据,如果开始没有,则文本框显示0
            else
              if(jtf.getText().equals("0")) 
                       jtf.setText(k);        //调用结果数据,如果有上次的结果,则文本框显示已经存在的数据和上次的结果
                 else  jtf.setText(jtf.getText()+k);}  
        }
         
        else if(text.equals("C"))
               {jtf.setText("0");
                jtf1.setText("");
                 lastnumber ="";
                 nextnumber ="";
                 str = "";}
         
        else if(text.equals("CE"))
           {jtf.setText("0");
             lastnumber ="";
             nextnumber ="";
             str = "";}
         
 
        //如果输入的是运算符
        else if(text.equals("+")||text.equals("-")||text.equals("×")||text.equals("÷")||text.equals("="))
        {   
             
            if(str.equals(""))                          //如果是第一次输入运算符
                { if(text.equals("=")) {}
                  else
                  {str=text;
                   result=jtf.getText();
                   jtf.setText(jtf.getText()+text);}
                }
             
            else                                        //如果之前已经输入过运算符
            { String temp1,temp2;  
              temp1 = jtf.getText();
              temp2=temp1.substring(temp1.length()-1,temp1.length());//得到文本输入框最后一位字符传给temp2
       
           //比较这次输入的符号和上次输入的符号是否相同
               if(temp2.equals("+")||temp2.equals("-")||temp2.equals("×")||temp2.equals("÷"))
                   {if   (text.equals("="))  {}         //如果重复输入=,那么不做任何处理   
                    else {str=text;                     //如果文本输入框最后一位是运算符号,那么重新传入运算符号(解决运算符重复输入问题)
                         String text2=temp1.substring(0, temp1.length()-1);  
                         jtf.setText(text2+str);}                            //重复输入运算符,以最后一次的为准  
                   }  
                 
                else
                  {
                nextnumber=temp1.substring(result.length()+1, temp1.length());  //得到第二个运算数给nextnumber
                double d1 = Double.parseDouble(result);               //定义一个双精度数
                double d2 = Double.parseDouble(nextnumber);           //定义一个双精度数
                 
                if(str.equals("+"))  {d = d1 + d2;}         //加法运算
                if(str.equals("-"))  {d = d1 - d2;}         //减法运算
                if(str.equals("×"))  {d = d1 * d2;}         //乘法运算
                if(str.equals("÷"))  {d = d1 / d2;}         //除法运算
                result=d+"";                                //运算结果放入result中,用了自动转换格式
                str = text;                                 //将本次运算符放入str中
                if(text.equals("=")) {str="";}              //如果这次按下的是"="键,那么清空str中存储的运算符
                jtf1.setText(result);   //在结果显示框显示结果
                     if(text.equals("="))                   //如果这次按下了"="键
                            {jtf.setText("0");}             //输入文本框变成初始"0"状态
                     else
                            {jtf.setText(result+str);}      //输入文本框变成   结果加上符号
                }  
            }
        }
         
            else                                                //数字键和.键的事件响应
            if(jtf.getText().equals("0"))                    //如果输入文本框显示"0",那么直接置换
                   jtf.setText(text);
               else                                             //如果输入文本框已经有数据,那么添加新数据
                   jtf.setText(jtf.getText()+text);    
            }  
        }
    }


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...