使用java swing仿window7标准计算器界面

①使用swing仿计算机界面,算法网上一大堆。没想到更好的,所以以后想到更简便的再补上。

②界面比较简单,所以使用swing的空布局,绝对定位上的。有图有证据。

③我会把实现的步骤,一步一步的展现出来

工具/原料

  • eclipse

  • java

方法/步骤

  1. 目标:初始化窗体

    代码:如下

    ----------------

    public class View extends JFrame{

    public View(){

    this.setTitle("计算器");//设置标题

    this.setResizable(false);//不可改变大小

    this.setLocationRelativeTo(null);//居中显示

    this.setSize(228, 324);//窗体大小,可以使用FastStone Capture的屏幕尺量一下win计算器的大小

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认关闭操作

    }

    public static void main(String[] args) {

    new View().setVisible(true);

    }

    }

  2. 目标:设置菜单

    代码:如下

    ----------------

    /**

    * 创建初始化菜单方法(别忘记在构造函数里调用)

    */

    private void initMenu(){

    jmb = new JMenuBar();//创建菜单条

    jm_view = new JMenu("查看(V)");//查看菜单

    jm_view.setMnemonic('V');//设置热键

    jm_edit = new JMenu("编辑(E)");//编辑菜单

    jm_edit.setMnemonic('E');

    jm_help = new JMenu("帮助(H)");//帮助菜单

    jm_help.setMnemonic('H');

    jmb.add(jm_view);

    jmb.add(jm_edit);

    jmb.add(jm_help);

    this.setJMenuBar(jmb);//将菜单条加入窗体中

    }

  3. 目标:仿结果显示框

    代码:如下

    ----------------

    /**

    * 创建内容区域初始化方法

    */

    private void initContent(){

    //整个窗口区域

    JPanel jp = new JPanel();

    jp.setLayout(null);//设置空布局以便绝对定位

    //显示框区域

    JPanel jptmp = new JPanel(){

    //获取背景图片,使用截图工具从win计算器显示框中截取2像素宽度作为背景

    Image bg = new ImageIcon("imgs/bg.png").getImage();

    /**

    * 填充结果显示区域的背景

    */

    @Override

    protected void paintComponent(Graphics g) {

    super.paintComponent(g);

    //x轴平铺满面板

    for(int i = 0;i<this.getWidth();i+=bg.getWidth(this)){

    g.drawImage(bg, i, 0, this);//绘制背景图片

    }

    }

    };

    //设置显示框上方小字体

    Font font_lab = new Font("arial", Font.BOLD, 22);

    jla_input = new JLabel();

    jla_input.setText("0");

    //设置字体右对齐

    jla_input.setHorizontalAlignment(JLabel.RIGHT);

    jla_input.setFont(font_lab);

    //设置显示框中计算结果的字体

    font_lab = new Font("arial", Font.BOLD, 10);

    jla_show = new JLabel();

    jla_show.setText("sqrt");

    //设置字体右对齐

    jla_show.setHorizontalAlignment(JLabel.RIGHT);

    jla_show.setFont(font_lab);

    //设置显示框区域的位置的大小

    jptmp.setBounds(14, 15, 190, 50);

    jptmp.setLayout(new BorderLayout());

    jptmp.add(jla_show,BorderLayout.NORTH);

    jptmp.add(jla_input,BorderLayout.CENTER);

    //设置边框

    jptmp.setBorder(BorderFactory.createLineBorder(new Color(142,156,173)));

    jp.add(jptmp);

    this.setLayout(new BorderLayout());

    this.add(jp,BorderLayout.CENTER);

    }

    使用java swing仿window7标准计算器界面 
  4. 目标:绘制其他按钮

    代码:如下

    ----------------

    ①设置字符枚举类

    public enum Operator{

    //用于swith判断,待用

    mC,mR,mS,mAdd,mSubtract,//mc,mr,ms,m+,m-

    clBack,clError,clClear,operNegation,operSqrt,//<-,ce,c,-/+,开平方

    n7,n8,n9,operDivide,operPer,// /,%,

    n4,n5,n6,operMultiply,operReciproc,//*,倒数

    n1,n2,n3,operSubtract,operEqu,//-,=

    n0,operDot,operAdd;//+

    //用于显示

    public static final String [] labs = new String[]{

    "MC","MR","MS","M+","M-",

    "←","CE","C","±","√",

    "7","8","9","/","%",

    "4","5","6","*","1/x",

    "1","2","3","-","=",

    "0",".","+"

    };

    }

    ②添加按钮

    jptmp = new JPanel();

    jptmp.setBounds(14, 72, 196,194);

    jptmp.setLayout(null);

    Font font_but = new Font("arial", Font.BOLD, 10);//创建按钮字体

    for (int i = 0; i < jb_oper.length; i++) {

    jb_oper[i] = new JButton(Operator.labs[i]);//设置按钮文字

    jb_oper[i].setForeground(new Color(30,57,91));//设置字体颜色

    jb_oper[i].setActionCommand(Operator.values()[i].toString());//设置按钮标示

    jb_oper[i].setFont(font_but);//设置按钮字体

    jb_oper[i].setBounds(i%5*(33+6), i/5*(24+6), 33, 24);//统一33宽,24高,间距6,每5个换一行

    jb_oper[i].setBorder(new LineBorder(new Color(135,151,170), 1));//设置按钮边框

    jb_oper[i].addActionListener(this);//添加监听器

    jptmp.add(jb_oper[i]);

    }

    jb_oper[24].setBounds(24%5*(33+6), 24/5*(24+6), 33, 24*2+6);//调整等号按钮位置

    jb_oper[25].setBounds(25%5*(33+6), 25/5*(24+6), 33*2+6, 24);//调整0按钮的位置

    jb_oper[26].setBounds(27%5*(33+6), 26/5*(24+6), 33, 24);//调整.按钮的位置

    jb_oper[27].setBounds(28%5*(33+6), 27/5*(24+6), 33, 24);//调整较好按钮的位置

    jp.add(jptmp);

    使用java swing仿window7标准计算器界面 
  5. 完整代码

    -----

    package com.lfd.view;

    import java.awt.BorderLayout;

    import java.awt.Color;

    import java.awt.Font;

    import java.awt.Graphics;

    import java.awt.Image;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import javax.swing.BorderFactory;

    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.JPanel;

    import javax.swing.border.LineBorder;

    import com.lfd.common.Operator;

    public class View extends JFrame implements ActionListener{

    private JMenuBar jmb;

    private JMenu jm_view,jm_edit,jm_help;

    private JLabel jla_input,jla_show;

    private JButton[] jb_oper = new JButton[28];

    public View(){

    initMenu();

    initContent();

    this.setTitle("计算器");//设置标题

    this.setResizable(false);//不可改变大小

    this.setLocationRelativeTo(null);//居中显示

    this.setSize(228, 324);//窗体大小,可以使用FastStone Capture的屏幕尺量一下win计算器的大小

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认关闭操作

    }

    /**

    * 初始化菜单方法

    */

    private void initMenu(){

    jmb = new JMenuBar();//创建菜单条

    jm_view = new JMenu("查看(V)");//查看菜单

    jm_view.setMnemonic('V');//设置热键

    jm_edit = new JMenu("编辑(E)");//编辑菜单

    jm_edit.setMnemonic('E');

    jm_help = new JMenu("帮助(H)");//帮助菜单

    jm_help.setMnemonic('H');

    jmb.add(jm_view);

    jmb.add(jm_edit);

    jmb.add(jm_help);

    this.setJMenuBar(jmb);//将菜单条加入窗体中

    }

    /**

    * 创建内容区域初始化方法

    */

    private void initContent(){

    //整个窗口区域

    JPanel jp = new JPanel();

    jp.setLayout(null);

    //显示框区域

    JPanel jptmp = new JPanel(){

    //获取背景图片,使用截图工具从win计算器显示框中截取2像素宽度作为背景

    Image bg = new ImageIcon("imgs/bg.png").getImage();

    /**

    * 填充结果显示区域的背景

    */

    @Override

    protected void paintComponent(Graphics g) {

    super.paintComponent(g);

    //x轴平铺满面板

    for(int i = 0;i<this.getWidth();i+=bg.getWidth(this)){

    g.drawImage(bg, i, 0, this);//绘制背景图片

    }

    }

    };

    //设置显示框上方小字体

    Font font_lab = new Font("arial", Font.BOLD, 22);

    jla_input = new JLabel();

    jla_input.setText("0");

    //设置字体右对齐

    jla_input.setHorizontalAlignment(JLabel.RIGHT);

    jla_input.setFont(font_lab);

    //设置显示框中计算结果的字体

    font_lab = new Font("arial", Font.BOLD, 10);

    jla_show = new JLabel();

    jla_show.setText("sqrt");

    //设置字体右对齐

    jla_show.setHorizontalAlignment(JLabel.RIGHT);

    jla_show.setFont(font_lab);

    //设置显示框区域的位置的大小

    jptmp.setBounds(14, 15, 190, 50);

    jptmp.setLayout(new BorderLayout());

    jptmp.add(jla_show,BorderLayout.NORTH);

    jptmp.add(jla_input,BorderLayout.CENTER);

    //设置边框

    jptmp.setBorder(BorderFactory.createLineBorder(new Color(142,156,173)));

    jp.add(jptmp);

    jptmp = new JPanel();

    jptmp.setBounds(14, 72, 196,194);

    jptmp.setLayout(null);

    Font font_but = new Font("arial", Font.BOLD, 10);//创建按钮字体

    for (int i = 0; i < jb_oper.length; i++) {

    jb_oper[i] = new JButton(Operator.labs[i]);//设置按钮文字

    jb_oper[i].setForeground(new Color(30,57,91));//设置字体颜色

    jb_oper[i].setActionCommand(Operator.values()[i].toString());//设置按钮标示

    jb_oper[i].setFont(font_but);//设置按钮字体

    jb_oper[i].setBounds(i%5*(33+6), i/5*(24+6), 33, 24);//统一33宽,24高,间距6,每5个换一行

    jb_oper[i].setBorder(new LineBorder(new Color(135,151,170), 1));//设置按钮边框

    jb_oper[i].addActionListener(this);//添加监听器

    jptmp.add(jb_oper[i]);

    }

    jb_oper[24].setBounds(24%5*(33+6), 24/5*(24+6), 33, 24*2+6);//调整等号按钮位置

    jb_oper[25].setBounds(25%5*(33+6), 25/5*(24+6), 33*2+6, 24);//调整0按钮的位置

    jb_oper[26].setBounds(27%5*(33+6), 26/5*(24+6), 33, 24);//调整.按钮的位置

    jb_oper[27].setBounds(28%5*(33+6), 27/5*(24+6), 33, 24);//调整较好按钮的位置

    jp.add(jptmp);

    this.setLayout(new BorderLayout());

    this.add(jp,BorderLayout.CENTER);

    }

    public static void main(String[] args) {

    new View().setVisible(true);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

    //TODO 实现逻辑操作

    JButton jb = (JButton) e.getSource();

       String commond = jb.getActionCommand();

    }

    }

    -----

    package com.lfd.common;

    public enum Operator{

    mC,mR,mS,mAdd,mSubtract,//mc,mr,ms,m+,m-

    clBack,clError,clClear,operNegation,operSqrt,//<-,ce,c,-/+,开平方

    n7,n8,n9,operDivide,operPer,// /,%,

    n4,n5,n6,operMultiply,operReciproc,//*,倒数

    n1,n2,n3,operSubtract,operEqu,//-,=

    n0,operDot,operAdd;//+

    public static final String [] labs = new String[]{

    "MC","MR","MS","M+","M-",

    "←","CE","C","±","√",

    "7","8","9","/","%",

    "4","5","6","*","1/x",

    "1","2","3","-","=",

    "0",".","+"

    };

    }

    使用java swing仿window7标准计算器界面 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值