正好最近期末考试考java,所以将以前学习java时候做的一些东西重新总结一下,仅仅供初学者参考。。。先上图吧。

java计算器展示栏 java计算器窗口_按钮监听

1,首先得把界面做出来(这里只是简单介绍Swing界面,后面会有对swing界面的一些详细介绍)
先上代码,

 

package cnhf523;
import javax.swing.*;
import java.awt.*;
public class Ji {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ji j=new Ji();
		j.UI();
	}
public void UI(){
	JFrame jf=new JFrame();//实例化一个JFrame类,用来创造一个窗口
	jf.setTitle("黄飞计算器");//设置窗口的标题
	jf.setSize(295,400);//设置窗口的大小
	jf.setLocation(500,500);//设置窗口的位置
	jf.setResizable(false);//设置窗口的大小是否可以改变
	jf.setDefaultCloseOperation(3);//设置点击关闭按钮后执行的操作这里设置为点击后关闭应用程序
	jf.setLayout(new BorderLayout());//设置界面的布局,影响窗口里面组件的排列,这里是设置为框架布局
	//实例化三个面板
	JPanel jp1=new JPanel();
	JPanel jp2=new JPanel();
	JPanel jp3=new JPanel();
	jp1.setLayout(new FlowLayout());//设置面板的布局
	JTextField t=new JTextField("0");//设置一个文本框,初始显示0
	t.setPreferredSize(new Dimension(240,90));//设置文本框的大小
	t.setFont(new Font("黑体",Font.BOLD,30));//设置文本迎文字的类型
	jp1.add(t);//将文本框放到第jp1面板上
	jf.add(jp1,"North");//将第一个面板放到窗口的北部,
	jp2.setLayout(new 	GridLayout(5,5));//第二个面板的布局设为网格布局,用来放置计算器的按钮
	 JS js=new JS(t);//实例话一个JS类,用来实现监听
	 //这里用循环来创建不同的按钮
    String s="+-*/789l456C123%0.=t";
	for(int i=0;i<s.length();i++){
	    JButton b=new JButton(s.substring(i, i+1));//实例化按钮
	    //对特殊按钮进行操作
	    if(s.substring(i,i+1).equals("t")){
	    	b.add(new JLabel("sqr"));
	    }
	    if(s.substring(i,i+1).equals("l")){
	    	b.add(new JLabel("De"));
	    }
	    if(s.substring(i,i+1).equals("r")){
	    	b.add(new JLabel("C"));
	    }
	    jp2.add(b);
	    b.addActionListener(js);//添加监听,事件触发后要实现的具体方法在js里面
	}
	jf.add(jp2,"Center");//将面板jp2加入到窗口上
	jp3.setPreferredSize(new Dimension(300,50));//设置面板jp3的大小
	jp3.add(new JLabel(new ImageIcon("QQ截图20130523215536.png")));//给面板jp3上加一个图片标签
	jf.add(jp3,"South");//将jp3放到窗口的南方
	jf.setVisible(true);//设置窗口是否可见,这里为可见
}
}

 下面这些代码是主要界面部分,

JFrame jf=new JFrame();//实例化一个JFrame类,用来创造一个窗口
	jf.setTitle("黄飞计算器");//设置窗口的标题
	jf.setSize(295,400);//设置窗口的大小
	jf.setLocation(500,500);//设置窗口的位置
	jf.setResizable(false);//设置窗口的大小是否可以改变
	jf.setDefaultCloseOperation(3);//设置点击关闭按钮后执行的操作这里设置为点击后关闭应用程序
	jf.setLayout(new BorderLayout());//设置界面的布局,影响窗口里面组件的排列,这里是设置为框架布局

 然后就是再往这些界面中添加一些东西

 这里,创建了三个面板,分别放在窗体的上中下三个位置,不同位置的的面板里面放的东西不同

//实例化三个面板
	JPanel jp1=new JPanel();
	JPanel jp2=new JPanel();
	JPanel jp3=new JPanel();
	jp1.setLayout(new FlowLayout());//设置面板的布局
	JTextField t=new JTextField("0");//设置一个文本框,初始显示0
	t.setPreferredSize(new Dimension(240,90));//设置文本框的大小
	t.setFont(new Font("黑体",Font.BOLD,30));//设置文本迎文字的类型
	jp1.add(t);//将文本框放到第jp1面板上
	jf.add(jp1,"North");//将第一个面板放到窗口的北部,
	jp2.setLayout(new 	GridLayout(5,5));//第二个面板的布局设为网格布局,用来放置计算器的按钮

 下面是实例化一个用于监听的类

JS js=new JS(t);//实例话一个JS类,用来实现监听

 

这个类的先不看,先看后面。

//这里用循环来创建不同的按钮
    String s="+-*/789l456C123%0.=t";
	for(int i=0;i<s.length();i++){
	    JButton b=new JButton(s.substring(i, i+1));//实例化按钮
	    //对特殊按钮进行操作
	    if(s.substring(i,i+1).equals("t")){
	    	b.add(new JLabel("sqr"));
	    }
	    if(s.substring(i,i+1).equals("l")){
	    	b.add(new JLabel("De"));
	    }
	    if(s.substring(i,i+1).equals("r")){
	    	b.add(new JLabel("C"));
	    }
	    jp2.add(b);
	    b.addActionListener(js);//添加监听,事件触发后要实现的具体方法在js里面
	}
	jf.add(jp2,"Center");//将面板jp2加入到窗口上
	jp3.setPreferredSize(new Dimension(300,50));//设置面板jp3的大小
	jp3.add(new JLabel(new ImageIcon("QQ截图20130523215536.png")));//给面板jp3上加一个图片标签
	jf.add(jp3,"South");//将jp3放到窗口的南方
	jf.setVisible(true);//设置窗口是否可见,这里为可见
}
}

 

上面有一行b.addActionListener(js);//添加监听,事件触发后要实现的具体方法在js里面
这样就能对按钮实现监听,这里面得传入一个参数js,这个必须是继承了ActionListener接口的类的对象

public class JS implements ActionListener{

 上面用到s.substring(i, i+1),这是获取字符串s的第i+1个字符

然后再看监听类JS

package cnhf523;
//所要导入的类
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
//这个事继承了ActionListener的类,为了给ji类中的按钮添加监听
public class JS implements ActionListener{
public	JTextField k;//文本输入框
float num1=0,num2=0,sum=0;
char ch='#';
public boolean can=false;
public JS(JTextField c){//构造方法里面传入参数
	k=c;
} 
	@Override
	public void actionPerformed(ActionEvent e) {//事件触发后具体要实现的方法
		// TODO Auto-generated method stub
		String sr=e.getActionCommand();//得到命令,判断是哪个事件被触发
		String sq=k.getText();//得到文本框上的类容
		if(sr.equals("l")){//这里是按了后退键
		 if(sq.length()>1){//如果输入的输超过一
			 k.setText(sq.substring(0,sq.length()-1));//只显示第一个数到倒数第二个数
		 }else{
			 if(sr.length()==1)//如果长度是一
				 k.setText("0");//就显示0
		 }
		}
		if(sr.equals("C")){//这里是按了清除键
			k.setText("0");//文本框显示0
			ch='#';
		}
		if(sr.charAt(0)>='0'&&sr.charAt(0)<='9'){//如果按了0-9数字键
			if(can==true){//如果can为true
				k.setText(sr);//文本框只显示刚才按下的数字,因为按下了运算符后,再按下数字,先前的数字就不显示了
				can=false;//设置can为false
			}else{
				if(sq.equals("0")){//
					k.setText(sr);
				}
				else
				k.setText(sq+sr);//显示先前的数加上现在按下的数
			}
			num1=Float.parseFloat(k.getText());//得到文本框的数字,文本框上的是字符,所以转换了下
		}
		//如果按下了运算键
		if(sr.equals("+")||sr.equals("-")||sr.equals("*")||sr.equals("/")||sr.equals("%")){
			can=true;
			num2=num1;
			k.setText(sr);//文本框设置为当前的命令
			ch=sr.charAt(0);//获取是按下了哪个运算
			}
		//如果按下了等于,进行操作
		if(sr.equals("=")){//判断需要进行哪些操作
			switch(ch){
			case '+':sum=num2+num1;break;
			case'-':sum=num2-num1;break;
			case'*':sum=num2*num1;break;
			case'/':sum=num2/num1;break;
			case'%':sum=num2%num1;break;
			}
			//文本框要显示结果,
			k.setText(String.valueOf(sum));//因为sum是数,所以需要转换成字符
			can=true;
			num1=Float.parseFloat(k.getText());
		}
		if(sr.equals(".")){
			k.setText(k.getText()+sr);
		}
		if(sr.equals("t")){//算平方根
			k.setText(String.valueOf(Math.sqrt(Float.parseFloat(k.getText()))));
		}
		}
		}
Float.parseFloat(k.getText());//将字符转换为数,String.valueOf(Math.sqrt(Float.parseFloat(k.getText())是将数转换为字符

有几个简便方法,比如说要将字符‘3’变成数字3  只需int s=‘3’-‘0’;利用他们ASCII码

将数字转换为字符就是+'0' char c=3+'0';