找回密码
 注册
搜索
热搜: java php web
查看: 2552|回复: 5

邀请制作JAVA版计算器

[复制链接]
发表于 2009-1-26 20:14:28 | 显示全部楼层 |阅读模式
我已经制作了基本的功能,对于计算器的许多功能的实现还需很多的技术,特邀请共同努力,

共同促进,制作出一个比较完善的计算器。下面我会陆续把自己的制作过程及代码贴上。
    我做的计算器最终界面如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2009-1-26 22:13:51 | 显示全部楼层
计算器界面设计:
  1.  使用Swing组件, JFrame,JLabel,JButton,JTextField,JMenu,JMenuItem及布局管理器。

代码如下(先不添加菜单):

import java.awt.event.*;
import java.awt.*;

import javax.swing.JPanel;
import javax.swing.JOptionPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;  

public class CalculationD extends JFrame{

        public Container contentPane;
        public JPanel northPanel;
        public JPanel leftPanel;
        public JPanel centerPanel;
        public JPanel rightPanel;
        public JTextField inputField1;
        public JTextField inputField2;        
        public JTextField inputField3;        
        
        public JLabel D1;
        public JLabel D2;
        public JLabel D3;
        public JButton plusButton;
        public JButton minusButton;
        public JButton mulButton;
        public JButton divButton;
        public JButton exitButton;
        public JButton answerButton;
        public JButton clearButton;
   
        public JButton onButton;
        public JButton twButton;
        public JButton thButton;
        public JButton foButton;
        public JButton fiButton;
        public JButton siButton;
        public JButton seButton;
        public JButton eiButton;
        public JButton niButton;
        public JButton zeButton;
        public JButton poButton;


    public CalculationD(){

            super("My Calculator");
            contentPane=this.getContentPane();
            this.setSize(250,400);
            
            leftPanel =new JPanel();
            leftPanel.setLayout(new GridLayout(4,1));
            D1=new JLabel(" D1");
            D2=new JLabel(" D2");
            D3=new JLabel("Answer  ");
         
            leftPanel.add(D1);
            leftPanel.add(D2);
            leftPanel.add(new JLabel(""));
            leftPanel.add(D3);
            centerPanel=new JPanel();
            centerPanel.setLayout(new GridLayout(3,1));
            inputField1=new JTextField();
            inputField2=new JTextField();
            inputField3=new JTextField();
            centerPanel.add(inputField1);
            centerPanel.add(inputField2);
            centerPanel.add(inputField3);
            inputField3.setEditable(false);        
            rightPanel=new JPanel();
            rightPanel.setLayout(new GridLayout(4,4));
            clearButton=new JButton("clear");
            plusButton=new JButton("+");
             minusButton=new JButton("-");
            mulButton=new JButton("*");
            divButton=new JButton("/");
            
            onButton=new JButton("1");
            twButton=new JButton("2");
             thButton=new JButton("3");
            foButton=new JButton("4");
            fiButton=new JButton("5");
            siButton=new JButton("6");
             seButton=new JButton("7");
            eiButton=new JButton("8");
            niButton=new JButton("9");
            zeButton=new JButton("0");
             poButton=new JButton(".");
      
        rightPanel.add(onButton);
        rightPanel.add(twButton);
        rightPanel.add(thButton);
        rightPanel.add(clearButton);
        rightPanel.add(foButton);
        rightPanel.add(fiButton);
        rightPanel.add(siButton);
        rightPanel.add(plusButton);
        rightPanel.add(seButton);
        rightPanel.add(eiButton);
        rightPanel.add(niButton);
        rightPanel.add(minusButton);
        rightPanel.add(zeButton);
        rightPanel.add(poButton);
        
        rightPanel.add(mulButton);
        rightPanel.add(divButton);
      
        contentPane.add(leftPanel,BorderLayout.WEST);
        contentPane.add(centerPanel,BorderLayout.CENTER);
        contentPane.add(rightPanel,BorderLayout.SOUTH);
        this.setVisible(true);


   addWindowListener(new WindowAdapter()
   {
          public void windowClosing(WindowEvent e)
                 {
                 ((Window)e.getComponent()).dispose();
             System.exit(0); } } );  


}

   

        public static void main(String[] args){               
                new CalculationD();        
        }        
}

运行结果如下,此时不具有任何计算,只可以实现关闭窗口的功能:
回复

使用道具 举报

 楼主| 发表于 2009-1-26 21:28:28 | 显示全部楼层
加入菜单:

  在 public CalculationD()构造函数中加入下面代码:
      
       JMenuBar menuBar=new JMenuBar();
      JMenu fileMenu=new JMenu("File");
      JMenuItem openMenu=new JMenuItem("Open");
      openMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
      JMenuItem saveMenu=new JMenuItem("Save");
      saveMenu.setAccelerator(KeyStroke.getKeyStroke  (KeyEvent.VK_S,InputEvent.CTRL_MASK));
      JMenuItem saveAsMenu=new JMenuItem("SaveAs");
      saveAsMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
      JMenuItem exitMenu=new JMenuItem("Exit");
      exitMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
      
      openMenu.setBackground(Color.orange);
      saveMenu.setBackground(Color.red);        
      fileMenu.add(openMenu);
      fileMenu.addSeparator();
      fileMenu.add(saveMenu);
      fileMenu.addSeparator();
      fileMenu.add(saveAsMenu);
      fileMenu.addSeparator();
      fileMenu.add(exitMenu);

      JMenu editMenu=new JMenu("Edit");
      JMenuItem copyMenu=new JMenuItem("Copy");
      copyMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
      JMenuItem cutMenu=new JMenuItem("Paste");
      cutMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
      JMenuItem pasteMenu=new JMenuItem("Paste");
      pasteMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
      JMenuItem deleteMenu=new JMenuItem("delete");
      deleteMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK));

      editMenu.add(editMenu);
      editMenu.addSeparator();
      editMenu.add(copyMenu);
      editMenu.addSeparator();
      editMenu.add(pasteMenu);
      editMenu.addSeparator();
      editMenu.add(deleteMenu);
      JMenu aboutMenu=new JMenu("About");
      JMenuItem helpMenu=new JMenuItem("Help");
      aboutMenu.add(helpMenu);
      menuBar.add(fileMenu);
      menuBar.add(editMenu);
      menuBar.add(aboutMenu);
      setJMenuBar(menuBar);
      //JLabel qq=new JLabel("    welcome to you !");
回复

使用道具 举报

 楼主| 发表于 2009-1-26 20:48:34 | 显示全部楼层
编写事件处理代码:
1.  本计算器是通过从键盘输入JTextField1和JTextField2的文本域数据, 通过功能按钮,“+”“-”。。
来计算。并把结果显示在JTextField3中。


2.通过点击数字按钮,在JTextField1d的文本域显示数字。
  目前我尚未处理好的问题:
   我只能让JTextField1获取数字按钮事件。
   如何使JTextField1和JTextField2分别接受数字按钮的事件?
   尚待解决。
回复

使用道具 举报

 楼主| 发表于 2009-1-26 22:02:24 | 显示全部楼层
创建一个实现运算功能的类不包含异常处理,比如文本域无数据的而发生的异常:

        // class jisuan implements ActionListener {

      //     public void actionPerformed(ActionEvent l)
      // {

或用下面的内置类;

       ActionListener jisuan =new ActionListener(){
            
            public void actionPerformed(ActionEvent l)
    {                  
            double d1=Double.parseDouble(inputField1.getText());
         double d2=Double.parseDouble(inputField2.getText());
  
        if((l.getActionCommand()).equals("+"))
         {
                 inputField3.setText(""+(d1+d2));
         }
         else if((l.getActionCommand()).equals("-"))
         {
                 inputField3.setText(""+(d1-d2));
         }
         else if((l.getActionCommand()).equals("*"))
         {
                 inputField3.setText(""+(d1*d2));
         }
         else if((l.getActionCommand()).equals("/"))
         {
                 inputField3.setText(""+(d1/d2));
         }

         else if((l.getActionCommand()).equals("clear"))
         {
                 inputField1.setText("");
                 inputField2.setText("");
                 inputField3.setText("");
         }         
    }     
  };
//}
回复

使用道具 举报

发表于 2009-1-26 21:34:15 | 显示全部楼层
仁兄的提议不错啊, ,多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|软晨网(RuanChen.com)

GMT+8, 2024-9-20 17:26

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表