您的当前位置:首页正文

用Swing写的一个计算器的例子(转贴)

2024-11-13 来源:个人技术集锦

在此我把源代码整个贴上来,有利于初学者学习哦。

//标准型计算器
package standardCalculator;

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.text.*;


public class Calculator1 extends JPanel implements ClipboardOwner{
 
 
  // declarations of all used components
  public JFrame theFrame;
  public JLabel memoryLabel;
  public JMenuBar theMenuBar;
  public JMenu editMenu;
  public JMenuItem copyMenuItem, pasteMenuItem;
  public JMenu viewMenu;
  public ButtonGroup styleButtonGroup;
  public JRadioButtonMenuItem staRBMenuItem, sciRBMenuItem;
  public JCheckBoxMenuItem chooseNumberGroup;
  public JMenu helpMenu;
  public JMenuItem helpMenuItem, aboutMenuItem;
  public ActionListener copyListener, pasteListener;
  public ActionListener styleListener, chooseListener;
  public ActionListener helpListener, aboutListener;
  public ActionListener buttonListener;
  public JTextField theTextField;
  public GridBagConstraints gbc;
 
 
  public Clipboard clipboard = getToolkit().getSystemClipboard();
  public int flagSTART = 1;
  public int flagCE = 0;
  public Double memoryStore = new Double(0);
  public double result = 0;
  String operator = "NULL";
  public String theDisplay = new String();
 
 
  public Calculator1(){
   
  }
 
 
  public Calculator1(boolean on){
   gbc = new GridBagConstraints();
   
   // creating the JFrame, JMenuBar, JTextField, JPanel
   theFrame = new JFrame("Calculator");
   theMenuBar = new JMenuBar();
   theTextField = new JTextField();
   theTextField.setHorizontalAlignment(JTextField.RIGHT);
    theTextField.setText("0.");
   
   
    // creating the menus and menu items
    editMenu = new JMenu("Edit");
    copyMenuItem = new JMenuItem("Copy");
    pasteMenuItem = new JMenuItem("Paste");
    pasteMenuItem.setEnabled(false);
    //===============================================================
    viewMenu = new JMenu("View");
    styleButtonGroup = new ButtonGroup();
    staRBMenuItem = new JRadioButtonMenuItem("Standard");
    sciRBMenuItem = new JRadioButtonMenuItem("Scientific", true);
    styleButtonGroup.add(staRBMenuItem);
    styleButtonGroup.add(sciRBMenuItem);
    //---------------------------------------------------------------
    chooseNumberGroup = new JCheckBoxMenuItem("NumberGroup");
    //===============================================================
    helpMenu = new JMenu("Help");
    helpMenuItem = new JMenuItem("Help Contents...");
    aboutMenuItem = new JMenuItem("About Calculator...");
   
   
    // creating JLabel
    memoryLabel = new JLabel("");
    memoryLabel.setBorder(BorderFactory.createBevelBorder(1));

   
    // creating the action listeners
    copyListener = new CopyListener();
    pasteListener = new PasteListener();
    //===============================================================
    styleListener = new StyleListener();
    //---------------------------------------------------------------
    chooseListener = new ChooseListener();
    //===============================================================
    helpListener = new HelpListener();
    aboutListener = new AboutListener();
    //===============================================================
    buttonListener = new ButtonListener();   
   
   
    // connecting components to the action listeners
    copyMenuItem.addActionListener(copyListener);
    pasteMenuItem.addActionListener(pasteListener);
    //===============================================================
    staRBMenuItem.addActionListener(styleListener);
    sciRBMenuItem.addActionListener(styleListener);
    //---------------------------------------------------------------
    chooseNumberGroup.addActionListener(chooseListener);
    //===============================================================
    helpMenuItem.addActionListener(helpListener);
    aboutMenuItem.addActionListener(aboutListener);
    //===============================================================
    ContainerListener listener = new ContainerAdapter() {
      public void componentAdded(ContainerEvent e) {
     Component comp = e.getChild();
     if (comp instanceof JButton) ((JButton)comp).addActionListener(buttonListener);
      }
    };
    addContainerListener(listener);
   
   
    // creating Mnemonics for MenuItems and RadioButtonMenuItems
    editMenu.setMnemonic(KeyEvent.VK_E);
    copyMenuItem.setMnemonic(KeyEvent.VK_C);
    pasteMenuItem.setMnemonic(KeyEvent.VK_P);
    //===============================================================
    viewMenu.setMnemonic(KeyEvent.VK_V);
    staRBMenuItem.setMnemonic(KeyEvent.VK_T);
    sciRBMenuItem.setMnemonic(KeyEvent.VK_S);
    //---------------------------------------------------------------
    chooseNumberGroup.setMnemonic(KeyEvent.VK_G);
    //===============================================================
    helpMenu.setMnemonic(KeyEvent.VK_H);
    helpMenuItem.setMnemonic(KeyEvent.VK_H);
    aboutMenuItem.setMnemonic(KeyEvent.VK_A);   
   
   
    // creating Accelerators for MenuItems and RadioButtonMenuItems
    copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(
      KeyEvent.VK_C, InputEvent.CTRL_MASK, false));
    pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(
      KeyEvent.VK_V, InputEvent.CTRL_MASK, false));
     
     
    // setting tooltips
    memoryLabel.setToolTipText("Memory setting flag");
   
   
    // adding components to menus
    editMenu.add(copyMenuItem);
    editMenu.add(pasteMenuItem);
    //===============================================================
    viewMenu.add(staRBMenuItem);
    viewMenu.add(sciRBMenuItem);
    viewMenu.addSeparator();
    //---------------------------------------------------------------
    viewMenu.add(chooseNumberGroup);
    //===============================================================
    helpMenu.add(helpMenuItem);
    helpMenu.addSeparator();
    helpMenu.add(aboutMenuItem);
   
   
    // adding menus to JMenuBar
    theMenuBar.add(editMenu);
    theMenuBar.add(viewMenu);
    theMenuBar.add(helpMenu);
   
   
    // adding components to JFrame
   gbc.weightx = 1.0; 
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.gridwidth = 6;
    addGB(this, theMenuBar, 0, 0);
    addGB(this, theTextField, 0, 1);
    //添加数字JButton
    gbc.gridwidth = 1;
    for(int row=5; row>2; row--)
   for(int column=1; column<4; column++)
     addGB(this, new JButton("  "+(15+column-3*row)+"  "), column, row);
 //添加其它JButton
    addGB(this, new JButton("0"), 1, 6);
    addGB(this, new JButton("+/-"), 2, 6);
    addGB(this, new JButton("."), 3, 6);
    addGB(this, new JButton("+"), 4, 6);
    addGB(this, new JButton("-"), 4, 5);
    addGB(this, new JButton("×"), 4, 4);
    addGB(this, new JButton("÷"), 4, 3);
    addGB(this, new JButton("="), 5, 6);
    addGB(this, new JButton(" 1/x "), 5, 5);
    addGB(this, new JButton("%"), 5, 4);
    addGB(this, new JButton("√ ̄"), 5, 3);
    addGB(this, new JButton("C"), 2, 2 );
    addGB(this, new JButton("CE"), 3, 2);
    gbc.gridwidth = 2;
    addGB(this, new JButton("Backspace"), 4, 2);
    gbc.gridwidth = 1;
    gbc.ipadx = 50;
    addGB(this, memoryLabel, 0, 2);
    gbc.ipadx = 0;
    addGB(this, new JButton("MC"), 0, 3);
    addGB(this, new JButton("MR"), 0, 4);
    addGB(this, new JButton("MS"), 0, 5);
    addGB(this, new JButton("M+"), 0, 6);
  } // end of constructing Calculator1(boolean on) 
 
 
  public void addGB(Container cont, Component comp, int x, int y) {
    if ((cont.getLayout() instanceof GridBagLayout) == false)
             cont.setLayout(new GridBagLayout());
    gbc.gridx = x;
    gbc.gridy = y;
    cont.add(comp, gbc);
  }
 
  class CopyListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
     copy();
    }
  }
 
  public void copy(){
 String srcData = theTextField.getText();
 if(srcData != null){
   StringSelection contents = new StringSelection(srcData);                
    clipboard.setContents(contents, this);
   pasteMenuItem.setEnabled(true);
 }
  }
 
  class PasteListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
     paste();
    }
  }
 
  public void paste(){
 Transferable content = clipboard.getContents(this);
 if(content != null){
   try{
     String dstData = (String)content.getTransferData(DataFlavor.stringFlavor);
     theTextField.setText(dstData);
   }catch (Exception e){
     System.out.println("Couldn't get contents in format: "+
                                 DataFlavor.stringFlavor.getHumanPresentableName());
       }                   
 }
  }
 
  class StyleListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
    
    }
  }

  class ChooseListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
      if(chooseNumberGroup.getState() == true){
       double operand = Double.parseDouble(theDisplay);
       ((DecimalFormat)numberFormat).setGroupingSize(3);
       numberFormat.setGroupingUsed(true);
       theTextField.setText(new Double(numberFormat.format(operand)).toString());
      }
     else numberFormat.setGroupingUsed(false);
    }
  }
   
  class HelpListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
   
    }
  }
 
  class AboutListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
   
    }
  }

  class ButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
     if(e.getActionCommand().trim().equals("C")){
       theDisplay = "0.";
       theTextField.setText(theDisplay);
       result = 0;
       flagSTART = 1;
       return;
     }
     else if(e.getActionCommand().trim().equals("CE")){
      flagCE = 1;
      theDisplay = "0.";
       theTextField.setText(theDisplay);
       flagSTART = 1;
       return;
     } 
      else if(e.getActionCommand().trim().equals("Backspace")){
       int lengeth = theDisplay.length();
       if(lengeth > 1){
         theTextField.setText(theDisplay.substring(0,lengeth-1));
          return;
        }
        theTextField.setText("");
        return;
     } 
      else if(e.getActionCommand().trim().equals("MS")){
      memoryLabel.setText("M");
      memoryLabel.setVerticalAlignment(JLabel.CENTER);
      memoryLabel.setHorizontalAlignment(JLabel.CENTER);
       memoryStore = Double.valueOf(theDisplay);
       return;
     }
     else if(e.getActionCommand().trim().equals("MC")){
      memoryLabel.setText("");
      memoryStore = new Double(0);
      return;
     }
      else if(e.getActionCommand().trim().equals("MR")){
       theDisplay = memoryStore.toString();
       theTextField.setText(theDisplay);
       return;
     }
     else if(e.getActionCommand().trim().equals("M+")){
      memoryStore = new Double(memoryStore.doubleValue()
        + Double.parseDouble(theDisplay));
      return;    
     }
      else if(e.getActionCommand().trim().equals("+/-")){
        theDisplay = new Double(0.0 - Double.parseDouble(theDisplay)).toString();
        theTextField.setText(theDisplay);
     return;
      }
      else if(e.getActionCommand().trim().equals("1/x")){
        theDisplay = new Double(1.0 / Double.parseDouble(theDisplay)).toString();
     theTextField.setText(theDisplay);
     return;
      }
     else if(e.getActionCommand().trim().equals("√ ̄")){
       theDisplay = new Double(Math.sqrt(Double.parseDouble(theDisplay))).toString();
       theTextField.setText(theDisplay);
       return;
     }
     else if(e.getActionCommand().trim().equals("%")){
       theDisplay = new Double(Double.parseDouble(theDisplay) / 100.0).toString();
       theTextField.setText(theDisplay);
       return;
     }
     else if(!isOperator(e.getActionCommand().trim())){
      if(flagSTART == 1){
        flagCE = 0; 
         theDisplay = e.getActionCommand().trim();
         theTextField.setText(theDisplay);
         flagSTART = 0;
         return;
       }
      theDisplay = theDisplay + e.getActionCommand().trim();
        theTextField.setText(theDisplay);
        return;
     }
     // is operator
     if(flagCE == 1){
      flagCE = 0;
      operator = e.getActionCommand().trim();
      return;
     } 
     else if(operator.equals("NULL")||operator.equals("=")){
      result = Double.parseDouble(theDisplay);
     }
     else if(operator.equals("+")){
       result = result + Double.parseDouble(theDisplay);
     }
     else if(operator.equals("-")){
      result = result - Double.parseDouble(theDisplay);
     } 
     else if(operator.equals("×")){
     result = result * Double.parseDouble(theDisplay);
     }
     else if(operator.equals("÷")){
      result = result / Double.parseDouble(theDisplay);
     }
     flagSTART = 1;
     operator = e.getActionCommand().trim();
     theDisplay = new Double(result).toString();
     theTextField.setText(theDisplay);
     return;
    }
  }
 
 
  boolean isOperator(String operator){
   if(operator.equals("+")||operator.equals("-")||operator.equals("×")
                           ||operator.equals("÷")||operator.equals("=")) return true;
   else return false;
  }


  public void lostOwnership(Clipboard clipboard, Transferable contents){
    System.out.println("Clipboard contents replaced");
  }

 
  private void launchFrame(){
   //JFrame theFrame = new JFrame("Calculator");
 theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 theFrame.setSize(420,220);
    theFrame.setLocation(100,100);
    theFrame.setContentPane(new Calculator1(true));
    theFrame.setVisible(true);
  }
 
  public static void main(String[] args){
    Calculator1 calculator1 = new Calculator1(true);
    calculator1.launchFrame();   
  }
}

Top