正好最近期末考试考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';