本文共 7860 字,大约阅读时间需要 26 分钟。
核心代码借鉴:http://download.csdn.net/download/wei_zq/3749034
事件处理方法借鉴了:http://www.jinxuliang.com/course/PPT/Show/54699909137e420664f62751 (内部类思想)
方法:使用Swing Designer绘制了一个JFrame界面;排版时Layout使用Absolute方便
//简易计算器import java.awt.BorderLayout;import java.awt.Color;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JSplitPane;import javax.swing.JInternalFrame;import java.awt.FlowLayout;import javax.swing.BoxLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.event.MouseListener;import java.awt.GridLayout;import javax.swing.JTextField;import java.awt.GridBagLayout;import java.awt.Font;import javax.swing.SwingConstants;import javax.swing.JMenuBar;import javax.swing.JMenu;import javax.swing.JMenuItem;import org.omg.CORBA.PUBLIC_MEMBER;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class GUITest extends JFrame { //事件监听器接口 private class ButtonListener implements ActionListener{ public void actionPerformed(ActionEvent e){ JButton btn = (JButton)e.getSource(); now=btn.getText();//获取按钮的文本 //处理运算符号 if (now == "+" || now == "-" || now == "*" || now == "/" || now == "=") { if (front == "+") {// 完成加法运算 if (c == 0) { second = Double.parseDouble(textResult.getText()); first = first + second; textResult.setText(String.valueOf(first)); front = now; c = 1; } } else if (front == "-") { if (c == 0) { second = Double.parseDouble(textResult.getText()); first = first - second; textResult.setText(String.valueOf(first)); front = now; c = 1; } } else if (front == "*") { if (c == 0) { second = Double.parseDouble(textResult.getText()); first = first * second; textResult.setText(String.valueOf(first)); front = now; c = 1; } } else if (front == "/") { if (c == 0) { second = Double.parseDouble(textResult.getText()); first = first / second; textResult.setText(String.valueOf(first)); front = now; c = 1; } } else if (front == "=") {// 处理等号 first = Double.parseDouble(textResult.getText()); textResult.setText(String.valueOf(first)); c = 1; front = now; } } else {// 处理数字 if (c == 1) { textResult.setText(""); c = 0; } res = textResult.getText(); res += now; textResult.setText(res); } } } //事件适配器 private class MouseHandler extends MouseAdapter{ public void mouseEntered(MouseEvent e) { JButton button=(JButton)e.getSource(); button.setBackground(Color.CYAN); String strText=button.getText(); strText=""+strText+"";//设置字体格式 button.setToolTipText(strText);//设置鼠标在Button上停留时显示提示信息 } public void mouseExited(MouseEvent e){ JButton button=(JButton)e.getSource(); button.setBackground(null); } } private String now; //存放当前按钮 private static String front = "+"; //存放前一次运算符 private String res; //存放当前文本框的值 private static double first = 0; //存放左值 private double second; //存放右值 private int c = 1; //按过=号,完成一次运算;重新开始 private JPanel contentPane; private JTextField textResult; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { GUITest frame = new GUITest(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public GUITest() { setTitle("GUITest\u4E4B\u7B80\u6613\u8BA1\u7B97\u5668"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 464, 326); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); textResult = new JTextField(); textResult.setEditable(false); textResult.setHorizontalAlignment(SwingConstants.RIGHT); textResult.setFont(new Font("Times New Roman", Font.PLAIN, 30)); textResult.setText("0"); textResult.setBounds(10, 40, 428, 59); contentPane.add(textResult); textResult.setColumns(10); ButtonListener ourListener=new ButtonListener(); JButton button_0 = new JButton("0"); button_0.addMouseListener(new MouseHandler()); button_0.addActionListener( ourListener ); button_0.setBounds(14, 109, 72, 42); contentPane.add(button_0); JButton button_1 = new JButton("1"); button_1.addMouseListener(new MouseHandler()); button_1.addActionListener(ourListener); button_1.setBounds(100, 109, 72, 42); contentPane.add(button_1); JButton button_2 = new JButton("2"); button_2.addMouseListener(new MouseHandler()); button_2.addActionListener(ourListener); button_2.setBounds(186, 109, 72, 42); contentPane.add(button_2); JButton button_3 = new JButton("3"); button_3.addMouseListener(new MouseHandler()); button_3.addActionListener(ourListener); button_3.setBounds(272, 109, 72, 42); contentPane.add(button_3); JButton button_4 = new JButton("4"); button_4.addMouseListener(new MouseHandler()); button_4.addActionListener(ourListener); button_4.setBounds(358, 109, 72, 42); contentPane.add(button_4); JButton button_5 = new JButton("5"); button_5.addMouseListener(new MouseHandler()); button_5.addActionListener(ourListener); button_5.setBounds(14, 173, 72, 42); contentPane.add(button_5); JButton button_9 = new JButton("9"); button_9.addMouseListener(new MouseHandler()); button_9.addActionListener(ourListener); button_9.setBounds(358, 173, 72, 42); contentPane.add(button_9); JButton button_6 = new JButton("6"); button_6.addMouseListener(new MouseHandler()); button_6.addActionListener(ourListener); button_6.setBounds(100, 173, 72, 42); contentPane.add(button_6); JButton button_7 = new JButton("7"); button_7.addMouseListener(new MouseHandler()); button_7.addActionListener(ourListener); button_7.setBounds(186, 173, 72, 42); contentPane.add(button_7); JButton button_8 = new JButton("8"); button_8.addMouseListener(new MouseHandler()); button_8.addActionListener(ourListener); button_8.setBounds(272, 173, 72, 42); contentPane.add(button_8); JButton button_10 = new JButton("+"); button_10.addMouseListener(new MouseHandler()); button_10.addActionListener(ourListener); button_10.setBounds(14, 235, 72, 42); contentPane.add(button_10); JButton button_14 = new JButton("="); button_14.addMouseListener(new MouseHandler()); button_14.addActionListener(ourListener); button_14.setBounds(358, 235, 72, 42); contentPane.add(button_14); JButton button_11 = new JButton("-"); button_11.addMouseListener(new MouseHandler()); button_11.addActionListener(ourListener); button_11.setBounds(100, 235, 72, 42); contentPane.add(button_11); JButton button_12 = new JButton("*"); button_12.addMouseListener(new MouseHandler()); button_12.addActionListener(ourListener); button_12.setBounds(186, 235, 72, 42); contentPane.add(button_12); JButton button_13 = new JButton("/"); button_13.addMouseListener(new MouseHandler()); button_13.addActionListener(ourListener); button_13.setBounds(272, 235, 72, 42); contentPane.add(button_13); JMenuBar menuBar = new JMenuBar(); menuBar.setBounds(0, 0, 125, 30); contentPane.add(menuBar); JMenu mnNewMenu_View = new JMenu("\u67E5\u770B"); menuBar.add(mnNewMenu_View); JMenu mnNewMenu_Edit = new JMenu("\u7F16\u8F91"); menuBar.add(mnNewMenu_Edit); JMenu mnNewMenu_Help = new JMenu("\u5E2E\u52A9"); menuBar.add(mnNewMenu_Help); JMenuItem menuItem_about = new JMenuItem("\u5173\u4E8E..."); menuItem_about.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"GUITest", "第一个作品", JOptionPane.PLAIN_MESSAGE); } }); mnNewMenu_Help.add(menuItem_about); }}
结果如图所示: