Swing实现计算器GUI

jopen 10年前

package swing;    import java.awt.BorderLayout;  import java.awt.GridBagConstraints;  import java.awt.GridBagLayout;  import java.awt.Insets;  import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import javax.swing.JButton;  import javax.swing.JFrame;  import javax.swing.JMenu;  import javax.swing.JMenuBar;  import javax.swing.JMenuItem;  import javax.swing.JOptionPane;  import javax.swing.JPanel;  import javax.swing.JTextArea;    /**   *    * @author He Jinlong   * @version 2.0 第一个版本没有使用网格布局,显示出来的效果很糟糕,通过使用网格布局,终于实现了想要的结果   */  public class NewCalculator extends JFrame {     // 定义菜单栏   private JMenuBar bar;   private JMenu mune;   private JMenuItem itemhelp;   private JMenuItem itemcaculater;   // 建立2个大的容器   private JPanel textPanel;// 存放显示屏的容器   private JPanel btnPanel;// 存放按钮的容器   private GridBagLayout gb;// 定义网格布局   private GridBagConstraints gbc;// 定义网格的布局的大管家   private JButton btn[] = new JButton[18];// 定义按钮数组   private JTextArea textArea;// 定义显示屏   private String btnStr[] = new String[18];// 定义按钮内容     /**    * 构造方法,用来初始化计算器    */   public NewCalculator() {    init();    addComponent();    setJMenuBar(bar);    setResizable(false);    setLocation(500, 220);    setTitle("我的计算器");    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    setVisible(true);    setSize(240, 300);   }     /**    * 初始化各个小组件    */   public void init() {    bar = new JMenuBar();      mune = new JMenu("帮助");      itemhelp = new JMenuItem("帮助");    itemcaculater = new JMenuItem("关于计算机");    itemhelp.addActionListener(menuListener);    itemcaculater.addActionListener(menuListener);      textPanel = new JPanel();    btnPanel = new JPanel();      gb = new GridBagLayout();    gbc = new GridBagConstraints();      gbc.gridwidth = 1;    gbc.gridheight = 1;    gbc.fill = GridBagConstraints.BOTH;    gbc.insets = new Insets(2, 2, 2, 2);    gbc.gridx = 0;    gbc.gridy = 0;      textArea = new JTextArea(3, 20);    btnStr = new String[] { "  c ", "  EDL ", "  * ", "  / ", "  1 ",      "  2 ", "  3 ", "  + ", "  4 ", "  5 ", "  6 ", "  - ", "  7 ",      "  8 ", "  9 ", "  = ", "  0 ", "  . " };    for (int i = 0; i < btn.length; i++) {     btn[i] = new JButton(btnStr[i]);     btn[i].addActionListener(buttonListener);    }     }     /**    * 将各个小组件添加到容器中    */   public void addComponent() {    textArea.setEditable(false);    textPanel.add(textArea);      btnPanel.setLayout(gb);    for (int i = 0; i < btn.length; i++) {     int x = 1;     if (i == 15) {      gbc.gridheight = 2;     } else if (i == 17) {      gbc.gridwidth = 2;     }     gb.setConstraints(btn[i], gbc);     btnPanel.add(btn[i]);     gbc.gridwidth = 1;     gbc.gridheight = 1;     gbc.gridx += x;     if ((i + 1) % 4 == 0) {      gbc.gridx = 0;      gbc.gridy += 1;     }      }      add(BorderLayout.NORTH, textPanel);      add(BorderLayout.CENTER, btnPanel);      bar.add(mune);      mune.add(itemhelp);    mune.add(itemcaculater);   }     // 实例化一个监听器,用来监听按钮点击事件   private ActionListener buttonListener = new ActionListener() {      @Override    public void actionPerformed(ActionEvent e) {       String str = ((JButton) e.getSource()).getText();     JOptionPane.showMessageDialog(null, "You clicked " + str       + " button");    }   };     // 同上,用来监听菜单上的点击事件   private ActionListener menuListener = new ActionListener() {      @Override    public void actionPerformed(ActionEvent e) {       String str = ((JMenuItem) e.getSource()).getText();     JOptionPane.showMessageDialog(null, "You clicked " + str       + " button");    }   };     public static void main(String[] args) {    new NewCalculator();   }  }