zoukankan      html  css  js  c++  java
  • Java计算器布局较好

    package com.duan;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;

    public class Calculator extends JFrame implements ActionListener{
    private static final long serialVersionUID = 1L;
    private JButton[] btn;
    private String[] labels = {"MC","MR","MS","M+","M-",
    "←","CE","C","±","√",
    "7","8","9","/","%",
    "4","5","6","*","1/x",
    "1","2","3","-","=",
    "0",".","+"};
    private double d1 = 0.0, d2 = 0.0;
    private String opt = "操作符";
    private JTextArea result = new JTextArea("0",3,20);

    public Calculator(String title)
    {
    super(title);
    this.setVisible(true);
    this.setBounds(400, 300, 200, 350);
    result.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
    addMenu();

    btn = new JButton[28];
    for(int i=0;i<btn.length;i++)
    {
    btn[i] = new JButton(labels[i]);
    }

    this.add(result, BorderLayout.NORTH);
    Panel p = new Panel();
    p.setLayout(new GridLayout(3,1));

    Panel p1 = new Panel();
    p1.setLayout(new GridLayout(2,5,2,2));
    for(int i=0;i<10;i++)
    {
    p1.add(btn[i]);
    }
    Panel p2 = new Panel();
    p2.setLayout(new GridLayout(2,5,2,2));
    for(int i=10;i<20;i++)
    {
    p2.add(btn[i]);
    }
    Panel p3 = new Panel();
    GridBagLayout gridbag = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();
    p3.setLayout(gridbag);
    c.fill = GridBagConstraints.BOTH;
    c.insets = new Insets(1,1,0,0);

    c.weightx = 1.0;
    addButton(p3,btn[20],gridbag,c);
    addButton(p3,btn[21],gridbag,c);
    addButton(p3,btn[22],gridbag,c);
    addButton(p3,btn[23],gridbag,c);

    c.gridwidth =GridBagConstraints.REMAINDER;
    c.gridheight=2;
    addButton(p3,btn[24],gridbag,c);

    //0
    c.gridx = 0;
    c.gridwidth=2;
    c.gridheight=1;
    addButton(p3,btn[25],gridbag,c);

    c.gridx=2;
    c.gridwidth=1;
    c.gridheight=1;
    addButton(p3,btn[26],gridbag,c);
    //+
    c.gridx=3;
    c.gridwidth=1;
    c.gridheight=1;
    addButton(p3,btn[27],gridbag,c);


    p.add(p1);
    p.add(p2);
    p.add(p3);
    this.add(p,BorderLayout.CENTER);

    this.pack();
    this.setResizable(false);

    //for(int i=0;i<28;i++)
    // System.out.println("btn["+i+"]: "+btn[i].getActionCommand());
    for(int i=0;i<28;i++)
    btn[i].addActionListener(this);

    //关闭窗口
    this.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
    }

    public void addMenu()
    {

    JMenuBar mb = new JMenuBar();
    //查看
    JMenu viewMenu = new JMenu("查看(V)");
    viewMenu.setMnemonic('V');
    JMenuItem stardardItem = new JMenuItem("标准型");
    JMenuItem scienceItem = new JMenuItem("科学型");
    JMenuItem digitalItem = new JMenuItem("数字统计");
    JMenuItem basicItem = new JMenuItem("基本");

    //编辑
    JMenu editMenu = new JMenu("编辑(E)");
    editMenu.setMnemonic('E');
    final JMenuItem copyItem = new JMenuItem("复制(C)");
    copyItem.setAccelerator(KeyStroke.getKeyStroke('C',InputEvent.CTRL_MASK));
    copyItem.setMnemonic('C');
    copyItem.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    result.selectAll();
    result.copy();
    }
    });
    final JMenuItem pasteItem = new JMenuItem("粘贴(V)");
    pasteItem.setAccelerator(KeyStroke.getKeyStroke('V',InputEvent.CTRL_MASK));
    pasteItem.setMnemonic('V');
    pasteItem.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    result.paste();
    }
    });

    final JMenuItem cutItem = new JMenuItem("剪切(X)");
    cutItem.setAccelerator(KeyStroke.getKeyStroke('X',InputEvent.CTRL_MASK));
    cutItem.setMnemonic('X');
    cutItem.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    result.selectAll();
    result.cut();
    }
    });

    //帮助
    JMenu helpMenu = new JMenu("帮助(H)");
    helpMenu.setMnemonic('H');
    JMenuItem viewHelpItem = new JMenuItem("查看帮助");
    JMenuItem aboutItem = new JMenuItem("关于计算器");

    //添加菜单项
    viewMenu.add(stardardItem);
    viewMenu.add(scienceItem);
    viewMenu.addSeparator();
    viewMenu.add(digitalItem);
    viewMenu.addSeparator();
    viewMenu.add(basicItem);

    editMenu.add(copyItem);
    editMenu.add(pasteItem);
    editMenu.add(cutItem);

    helpMenu.add(viewHelpItem);
    helpMenu.addSeparator();
    helpMenu.add(aboutItem);

    //添加菜单
    mb.add(viewMenu);
    mb.add(editMenu);
    mb.add(helpMenu);

    final JPopupMenu pm = new JPopupMenu();
    pm.add(copyItem);
    pm.add(pasteItem);
    pm.add(cutItem);
    result.addMouseListener(new MouseAdapter()
    {
    public void mouseReleased(MouseEvent e)
    {
    if(e.isPopupTrigger())
    pm.show(result,e.getX(),e.getY());
    }
    });
    result.add(pm);
    this.setJMenuBar(mb);
    }


    public void addButton(Panel p,JButton btn,GridBagLayout g, GridBagConstraints c)
    {
    g.setConstraints(btn, c);
    p.add(btn);
    }

    public static void main(String[] args) {
    new Calculator("Java 计算器");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    Object t = e.getSource();
    try{
    //0-9的数字按钮
    for(int i=25;i<26;i++)
    if(t.equals(btn[i]))
    result.setText(result.getText()+(i-25));//0
    for(int i=20;i<23;i++)
    if(t.equals(btn[i]))
    result.setText(result.getText()+(i-19));//1 2 3
    for(int i=15;i<18;i++)
    if(t.equals(btn[i]))
    result.setText(result.getText()+(i-11));//4 5 6
    for(int i=10;i<13;i++)
    if(t.equals(btn[i]))
    result.setText(result.getText()+(i-3));// 7 8 9
    //加法+
    if(t.equals(btn[27]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    result.setText("");
    opt = "+";
    }

    //减法-
    if(t.equals(btn[23]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    result.setText("");
    opt = "-";
    }

    //乘法*
    if(t.equals(btn[18]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    result.setText("");
    opt = "*";
    }

    //除法/
    if(t.equals(btn[13]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    result.setText("");
    opt = "/";
    }
    //取模
    if(t.equals(btn[14]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    result.setText("");
    opt = "%";
    }
    //四则运算、取模结果
    if(t.equals(btn[24]))
    {
    d2 = Double.parseDouble(result.getText());
    System.out.println(d2);
    //result.setText("");
    if(opt.equals("+"))
    result.setText(""+(d1+d2));
    else if(opt.equals("-"))
    result.setText(""+(d1-d2));
    else if(opt.equals("*"))
    result.setText(""+(d1*d2));
    else if(opt.equals("/"))
    {
    if(d2 == 0)
    result.setText("除数不能为0");
    else
    result.setText(""+(d1/d2));
    }
    else if(opt.equals("%"))
    result.setText(""+(d1%d2));
    }
    //求导
    if(t.equals(btn[19]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    opt = "1/x";
    if(opt.equals("1/x"))
    result.setText(""+(1/d1));
    }
    //开方
    if(t.equals(btn[9]))
    {
    d1 = Double.parseDouble(result.getText());
    System.out.println(d1);
    opt = "√";
    if(opt.equals("√"))
    {
    if(d1 > 0)
    result.setText(""+Math.sqrt(d1));
    else
    result.setText("负数没有平方根");
    }
    }
    //CE or C
    if(t.equals(btn[6]) || t.equals(btn[7]))
    {
    result.setText("");
    }
    //←
    if(t.equals(btn[5]))
    {
    String s = result.getText();
    result.setText(s.substring(0,s.length()-1));
    }
    //±
    if(t.equals(btn[8]))
    {
    d1 = Double.parseDouble(result.getText());
    result.setText(""+(-d1));
    }
    //.
    if(t.equals(btn[26]))
    {
    if(result.getText().trim().indexOf(".") != -1) //判断字符串中是否已经包含了小数点
    {
    }
    else //如果没有小数点
    {
    if(result.getText().trim().equals("0"))//如果开始为0
    {
    result.setText(("0"+e.getActionCommand()).toString());
    }
    else if(result.getText().trim().equals(""))//如果初时显示为空
    {
    }
    else
    {
    result.setText((result.getText()+e.getActionCommand()).toString());
    }
    }
    }
    }catch(Exception ee){}

    }
    }

  • 相关阅读:
    segmentedControl设置字体和字体颜色问题
    iOS 8 自适应 Cell
    视频聊天 Demo
    tensorflow生成随机数的操作 tf.random_normal & tf.random_uniform & tf.truncated_normal & tf.random_shuffle
    python selenium点滴
    cmd 字符串截取
    cmd 获取 拖拽文件名
    cmd for 用法
    cmd dos bat 深度变量文件夹指定文件
    bat cmd dos 通过拖拽参数 上传 截取拖拽上传文件名
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11103106.html
Copyright © 2011-2022 走看看