代码如图:
package java2; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; public class test03 extends JFrame{ //定义3个文本框 分别对应计算器里第一个数、第二个数和结果的文本框 JTextField jtfNum1,jtfNum2,jtfResult; //定义按钮加减乘除 JButton jbtAdd,jbtSub,jbtMul,jbtDiv; public test03() { // TODO 自动生成的构造函数存根 JPanel p1=new JPanel(); p1.setLayout(new FlowLayout()); //为了使得2个文本框及其标签在同一行上要设置浮动的布局跟HTML5里面一样的 p1.add(new JLabel("Number 1")); p1.add(jtfNum1=new JTextField(3)); //JTextField(3) 里3是文本框的长度,如果是零的话则首选宽度将是组件实现的自然结果 p1.add(new JLabel("Number 2")); p1.add(jtfNum2=new JTextField(3)); p1.add(new JLabel("Result")); p1.add(jtfResult=new JTextField(8)); jtfResult.setEditable(false); //结果当然是不可以随便改的啦 jtfResult.setHorizontalAlignment(SwingConstants.RIGHT);//设置文本的水平对齐方式,就是结果靠在哪边 JPanel p2=new JPanel(); //添加4个组件按钮 p2.setLayout(new FlowLayout()); p2.add(jbtAdd=new JButton("add")); p2.add(jbtSub=new JButton("Subtract")); p2.add(jbtMul=new JButton("Multiply")); p2.add(jbtDiv=new JButton("Divide")); jbtAdd.setMnemonic('A'); //这个就是等于设置快捷键快速的去按按钮,比如jbtAdd.setMnemonic('A'); 你按Alt+A就可以按加法了 jbtSub.setMnemonic('S'); jbtMul.setMnemonic('M'); jbtDiv.setMnemonic('D'); setLayout(new BorderLayout()); //布局的设置,跟前面的一样,一个下面,一个在上面的中间 add(p1,BorderLayout.CENTER); add(p2,BorderLayout.SOUTH); jbtAdd.addActionListener(new Listener()); //先把按钮全部添加监听事件,Listener是下面创建的类,在下面Listener类里用了ActionListener接口,重写了actionPerformed方法(点击的事件) jbtSub.addActionListener(new Listener()); //在发生操作事件时,都会调用该对象的 actionPerformed 方法 jbtMul.addActionListener(new Listener()); jbtDiv.addActionListener(new Listener()); } class Listener implements ActionListener{ public void actionPerformed(ActionEvent e) { if(e.getSource()==jbtAdd)calulate('+'); //getSource是得到对象,就是你按了哪个按钮 else if(e.getSource()==jbtSub)calulate('-'); else if(e.getSource()==jbtMul)calulate('*'); else if(e.getSource()==jbtDiv)calulate('/'); } //这是计算的函数 getText()得到文本. trim() 方法用于删除字符串的头尾空白符 然后doubleValue()文本转double类型的数字 private void calulate(char operator) { // TODO 自动生成的方法存根 double num1=new Double(jtfNum1.getText().trim()).doubleValue(); double num2=new Double(jtfNum2.getText().trim()).doubleValue(); double result=0; switch(operator) { case '+':result =num1+num2; break; case '-':result =num1-num2; break; case '*':result =num1*num2; break; case '/':result =num1/num2; break; } jtfResult.setText(String.valueOf(result)); } } public static void main(String[] args) { // TODO 自动生成的方法存根 test03 frame=new test03(); frame.setSize(340, 150); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }运行图: