核心代码借鉴: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="<html><font style=\"color:red; font-size:20px;\">"+strText+"</font></html>";//设置字体格式
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);
}
}
结果如图所示: