资源描述
JAVA项目实战
计算器
一、开发环境
Eclipse集成开发环境。
二、实现功能
加、减、乘、除的整数运算。
三、运用的知识点
1、JFrame窗体的使用
2、JButton按钮的使用
3、JTe*tFiled输入文本框的使用
4、Container容器的使用
5、监听事件的使用
6、内部类
7、If语句
8、Switch case 语句
9、包
10、包的引用
11、数据类型之间的转换(String转Int转Double
Double.valueOf ( String str ), Interger.valueOf(Stringstr))
四、重点知识的讲解
常用窗体
窗体作为Swing应用程序中组件的承载体,处于非常重要的位置。
Swing中常用的窗体包括JFrame和JDialog,本节将着重讲解这两个窗体的使用方法。
1、 JFrame 窗体
JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发应用程序时可以通过继承java.swing.IFrame 类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件。由于该窗体继承了 JFrame类,所以它拥有“最大化”、“最小化”和关闭等按钮。下面将详细讲解JFrame窗体在Java应用程序中的使用方法。JFrame在程序中的语法格式如下:
JFrame jf=new JFrame(title):Container container=jf getContent
Pane0;
参数含义如下:jf : JFrame类的对象 container:Container
类的对象,可以使用JFrame对象调用getContentPane ()方法获取。读者大致应该有这样一个概念,Swing组件的窗体通常与组件和容器相关,所以在JFrame对象创建完成后,需要调用getContentPane ()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器。通常,这个容器用来包含和显示组件。如果需要将组件添加至容器,可以使用来自Container类的add
()方法进行设置。例如:container.add(new JButton(" 按钮”));
//Button按钮组件在容器添加组件后,也可以使用Container类的
remove()方法将这些组件从容器中删除。例如
container remove(new JButton(" 按钮”));下面的实例中实现了 JFrame对象创建一个窗体,并在其中添加一个组件。【例】在项目中创建E*amplel
类,该类继承JFrame类成为窗体类,在该类中创建标签组件,并添加到窗体界面中。
import java.awt.Color;
import java.awt.Container;
import java*.swing.JFrame;
import java*.swing.JLabel;
import java*.swing.SwingConstants;
import java*.swing.WindowConstants;
publicclass E*amplel*tends JFrame { 〃定义一个类继承 JFrame 类
public E*ample1(String titile ){〃定义一个构造方法,构造一个窗体。
JFrame jf = new JFrame( titile ); // 实例化一个 JFrame 对象
Container container = jf.getContentPane(); //获取一个容器
JLabel jl = new JLabel("这是一个 JFrame 窗体");//实例化一个 JLabel 对象
//使标签上的文字居中
jl.setHorizontalAlignment(SwingConstants. CENTER );
container .add( jl);//将标签添加到容器中
container .setBackground(Color. WHITE);//设置容器的背景颜色
jf.setVisible( true );//设置窗体可视
jf.setSize(4, 4); //设置窗体大小
〃设置窗体关闭方式
jf.setDefaultCloseOperation(WindowConstants. E*IT_ON_CLOSE );
}
publicstaticvoid main(String[] args ) (//在主方法中构造一个窗体
new E*ample1("创建一个 JFrame 窗体");
}
}
运行本实例程序,结果如图所示。
在例中,E*atplel 类继承了 JFrame 类,在 E*ample1(String titile)方法中实例化JFrmne对象。JFrame类的常用构造方法包括以下两种形式
public JFrame() 。
public JFrame(String title).
JFrame类中的两种构造方法分别为无参的构造方法与有参的构造方法,
第1种形式的构造方法可以创建一个初始不可见、没有标题的新窗体;第2
种形式的构造方法在实例化该JFrame对象时可以创建一个不可见但具有标题的窗体。可以使用JFrme对像调用show()方法使窗体可见,但是该方法早已
被新版JDK所弃用,通常使用setVisible(true)方法使窗体可见。
同时可以使用setSize(int * , int y)方法设置窗体大小,其中*与y变量分别代表窗体的宽与高。
创建窗体后,需要给予窗体一个关闭方式,可以调用setDefaultCloseOperation()方法关闭窗体°Java为窗体关闭提供了多种
方式,常用的有以下4种
1 、 DO_NOTHING_ON_CLOSE 。
2 、 DISPOSE_ON一CLOSE 。
3 、 HIDE_ON一CLOSE 。
4 、 E*TT_ON一CLOSE 。
第1种窗体退出方式代表什么都不做就将窗体关闭;第2种退出方式则代表任何注册监听程序对象后会自动隐藏并释放窗体;第3种方式表示隐藏窗的默认窗关闭;第4种退出方式表示退出应用程序默认窗关闭。
2、JDialog 窗体
JDialog窗体是Swing组件中的对话框,它继承了 AWT组件java.awtDialog 类。
JDialog窗体的功能是从一个窗体中弹出另一个窗体,就像是在使用IE浏览器时弹出的确定对话框一样°JDialog窗体实质上就是另一种类型的窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性。
在应用程序中创建JDialog窗体需要实例化JDialog类,通常使用以下几个JDialog类的构造方法。
public JDialog():创建一个没有标题和父窗体的对话框。
public JDialog(Frame f): 创建一个指定父窗体的对话框,但该窗体没有标题。
public JDialog(Frame f, boolean model):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。
public JDialog(Frame f , String title):创建一个指定标题和父窗体的对话框。
public JDialog(Frame f String titleboolean model):创建一个
指定标题、窗体和模式的对话框。
下面来看一个实例,该实例主要实现单击JFrme窗体中的按钮后,弹出一个对话框窗体。
【例】在项目中创建MyJDialog类,该类继承JDialog窗体,并在窗中添加按钮,当用户点击该按钮后,将弹出一个对话框窗体。本实例代码如下:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java*.swing.JButton;
import java*.swing.JDialog;
import java*.swing.JFrame;
import java*.swing.JLabel;
import java*.swing.SwingConstants;
publicclass MyFramee*tends JFrame{
public MyFrame(){
Container container = getContentPane();〃创建一个容器
container .setLayout( null );
JLabel jl = new JLabel("这是一个JFrame窗体");//在窗体中设置标签〃使标签上的文字居中
jl .setHorizontalAlignment(SwingConstants. CENTER );
container .add( jl);
JButton bl = new JButton("弹出对话框");//实例化一个按钮bl.setBounds(10, 10, 1, 21);
container .add( bl); 〃将按钮添加到容器中setSize(4,4);〃设置窗体的大小
bl.addActionListener( new ActionListener(){ 〃为按钮添加鼠标点击事件@Override
publicvoid actionPerformed(ActionEvent e) {
〃使MyDialog窗体可见
new MyDialog(MyFrame. this).setVisible( true );
}
});
}
publicstaticvoid main(String[] args ) {
new MyFrame().setVisible( true);;
}
}
class MyDialoge*tends JDialog{
public MyDialog(MyFrame frame ){
〃实例化一个JDialog对象,指定对话框的父窗体、窗体标题和类型
super (frame ,"第一个 Dialog 窗体",true );
Container container = getContentPane(); 〃创建一个容器
container .add( new JLabel("这是一个对话框"));//在容器中添加标签setBounds(120,120,1,1);//设置对话框的大小
}
}
运行本实例,结果如图所示。
在本实例中,为了使对话框在父窗体弹出,定义了一个JFrame窗体,首先在该窗体中定义一个按钮,然后为此按钮添加一个鼠标单击监听事件,这里使用new MyJDialog().setVisible(true) 语句使对话框窗体可见,这样就实现了用户单击该按钮后弹出对话框的功能。在MyJDialog类中,由于它继
承了 JDialog类,所以可以在构造方法中使用super关键字调用JDialog构
String
造方法。在这里使用了public JDialog(Frame ftitle, boolean model)这种形式的构造方法,相应地设置了自定义的
JFrame窗体以及对话框的标题和窗体类型。本实例代码中可以看到,
JDialog窗体与JFrame窗体形式基本相同,甚至在设置窗体的特性时调用的方法名称都基本相同,如设置窗体大小、窗体关闭状态等。
计算器
package com.rakey.ui;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java*.swing.JButton;
import java*.swing.JFrame;
import java*.swing.JTe*tField;
import java*.swing.WindowConstants;
publicclass UI (
private
JButton
clear ; //清除按钮(AC )
private
JButton
backspace ; // 退格键
private
JButton
zhengfuhao ; // +/-键
private
JButton
chuhao ; // 除号
private
JButton
b_7;// 按键 7
private
JButton
b_8;// 按键 8
private
JButton
b_9;// 按键 7
private
JButton
b_cheng ; // 乘号键
private
JButton
b_4;// 按键 4
private
JButton
b_5;// 按键 5
private
JButton
b_6;// 按键 6
private
JButton
b_jian ; //减号键
private
JButton
b_1;// 按键 1
private
JButton
b_2;// 按键 2
private
JButton
b_3; // 按键 3
private
JButton
b_jia ; //加号键
private JButton b_0; // 按键 0
private JButton b_dian ; // 按键.
private JButton b_deng ; // 按键=
private JTe*tField display ;
public String integer ;
public UI() (
// 1:新建一个JFrame对象为f
JFrame jf = new JFrame("计算器");
// 2:设置布局
jf.setLayout( null);
// 3:得到一个容器container
Container container = jf.getContentPane();
//改变容器(container)的背景颜色
container .setBackground(Color. YELLOW);
//新建一个JTe*tField对象
display = new JTe*tField( "0" );
//设置JTe*tField在container当中的位置和JTe*tField的宽度,高度
display .setBounds(10, 10, 310, 1);
//设置字体的大小和字体
display .setFont( new Font("楷体",Font. BOLD, 40));
//设置字体的颜色
display .setForeground( new Color(255, 0, 0));
//设置字体的显示位置(从最右边开始显示)
display .setHorizontalAlignment(JTe*tField. RIGHT );
//把JTe*tField放到container容器当中
container .add(display );
//新建一个JButton对象
clear = new JButton( "AC" );
//设置JButton在container当中的位置和JButton的宽度,高度
clear .setBounds(10, 115, 70, 40);
//把JButton放到container容器当中container .add( clear );
clear .addActionListener( new Click());
//新建一个JButton对象
backspace = new JButton( " — ");
//设置JButton在container当中的位置和JButton的宽度,高度backspace .setBounds(90, 115, 70, 40);
//把JButton放到container容器当中
container .add( backspace );
backspace .addActionListener( new Click());
//新建一个JButton对象
zhengfuhao = new JButton( "+/-");
//设置JButton在container当中的位置和JButton的宽度,高度zhengfuhao .setBounds(170, 115, 70, 40);
//把JButton放到container容器当中container .add( zhengfuhao );
zhengfuhao .addActionListener( new Click());
//新建一个JButton对象
chuhao = new JButton( ":”);
//设置JButton在container当中的位置和JButton的宽度,高度chuhao .setBounds(250, 115, 70, 40);
//把JButton放到container容器当中
container .add( chuhao );
chuhao .addActionListener( new Click());
//新建一个JButton对象
b_7 = new JButton( "7");
//设置JButton在container当中的位置和JButton的宽度,高度b_7.setBounds(10, 165, 70, 40);
//把JButton放到container容器当中
container .add( b_7);
b_7 .addActionListener( new Click());
//新建一个JButton对象
b_8 = new JButton( "8");
//设置JButton在container当中的位置和JButton的宽度,高度
b_8 .setBounds(90, 165, 70, 40);
// 把 JButton 放到 container
container .add( b_8);
b_8 .addActionListener( new
//新建一个JButton对象
b_9 = new JButton( "9");
// 设置 JButton 在 container
b_9 .setBounds(170, 165, 70,
// 把 JButton 放到 container
container .add( b_9);
b_9 .addActionListener( new
//新建一个JButton对象
b_cheng = new JButton( " x
// 设置 JButton 在 container
b_cheng .setBounds(250, 165,
// 把 JButton 放到 container
容器当中
Click());
当中的位置和JButton的宽度,高度
40);
容器当中
Click());
);
当中的位置和JButton的宽度,高度
70, 40);
容器当中
container .add(b_cheng );
b_cheng .addActionListener( new Click());
//新建一个JButton对象
b_4 = new JButton( "4");
//设置JButton在container当中的位置和JButton的宽度,高度
b_4 .setBounds(10, 215, 70, 40);
//把JButton放到container容器当中
container .add( b_4);
b_4 .addActionListener( new Click());
//新建一个JButton对象
b_5 = new JButton( "5");
//设置JButton在container当中的位置和JButton的宽度,高度
b_5 .setBounds(90, 215, 70, 40);
//把JButton放到container容器当中
container .add( b_5);
b_5 .addActionListener( new Click());
//新建一个JButton对象b_6 = new JButton( "6");
//设置JButton在container当中的位置和JButton的宽度,高度
b_6 .setBounds(170, 215, 70, 40);
//把JButton放到container容器当中
container .add( b_6);
b_6 .addActionListener( new Click());
//新建一个JButton对象
b_jian = new JButton( "-");
//设置JButton在container当中的位置和JButton的宽度,高度
b_jian .setBounds(250, 215, 70, 40);
//把JButton放到container容器当中
container .add(b_jian );
b_jian .addActionListener( new Click());
//新建一个JButton对象
b_1 = new JButton( "1");
//设置JButton在container当中的位置和JButton的宽度,高度b_1 .setBounds(10, 265, 70, 40);
//把JButton放到container容器当中
container .add( b_1);
b_1 .addActionListener( new Click());
//新建一个JButton对象
b_2 = new JButton( "2");
//设置JButton在container当中的位置和JButton的宽度,高度b_2 .setBounds(90, 265, 70, 40);
//把JButton放到container容器当中
container .add( b_2);
b_2 .addActionListener( new Click());
//新建一个JButton对象
b_3 = new JButton( "3");
//设置JButton在container当中的位置和JButton的宽度,高度b_3.setBounds(170, 265, 70, 40);
.
//把JButton放到container容器当中
container .add( b_3);
b_3 .addActionListener( new Click());
//新建一个JButton对象
b_jia = new JButton( " + ");
//设置JButton在container当中的位置和JButton的宽度,高度
b_jia .setBounds(250, 265, 70, 40);
//把JButton放到container容器当中
container .add(b_jia);
b_jia .addActionListener( new Click());
//新建一个JButton对象
b_0 = new JButton( "0");
//设置JButton在container当中的位置和JButton的宽度,高度
b_0.setBounds(10, 315, 150, 40);
//把JButton放到container容器当中container .add( b_0);
b_0.addActionListener( new Click());
//新建一个JButton对象
b_dian = new JButton( ".");
//设置JButton在container当中的位置和JButton的宽度,高度
b_dian .setBounds(170, 315, 70, 40);
//把JButton放到container容器当中
container .add(b_dian );
b_dian .addActionListener( new Click());
//新建一个JButton对象
b_deng = new JButton("=");
//设置JButton在container当中的位置和JButton的宽度,高度
b_deng .setBounds(250, 315, 70, 40);
//把JButton放到container容器当中
container .add(b_deng );
b_deng .addActionListener( new Click());
//使该窗体可见(false:不可见,true :可见)
jf.setVisible( true);
//设置窗体的大小
jf.setSize(345, 4);
//关闭窗体
jf.setDefaultCloseOperation(WindowConstants.E*IT_ON_CLOSE );
}
Stringshu_1="0";//保存输入数据
Stringshu_2="0";//保存输入数据
Stringfuhao="0";//存放计算符号
/**
* 类名:Click
*功能:监听各个按键是否按下,处理各个按键按下的内容和相关的功能
* 实现:ActionListener 接
*作者:饶凌云
*/
class Click implements ActionListener {
^Override
publicvoid actionPerformed(ActionEvent e) (
/*判断输入的数据是否大于9位,如果大于9位数,就会显示”最多输入9个字符"*/
if (display .getTe*t().length() >= 9) (
display .setTe*t("");
display .setTe*t("最多输入9个字符");
return ;
}
/*清除按钮,如果该按键按下后,显示框的内容就会清零*/
if (e.getSource() == clear) (
display .setTe*t( "0");
} elseif (e.getSource() ==b_1) (
if (display .getTe*t().equals( "0")) (
display .setTe*t( "1");
return ;
display .setTe*t( display .getTe*t() + "1");
} elseif (e.getSource() ==b_2) (
// display.setTe*t("2");
if (display .getTe*t().equals( "0")) (
display .setTe*t( "2");
return ;
}
display .setTe*t( display .getTe*t() + "2");
} elseif (e.getSource() ==b_3) (
if (display .getTe*t().equals( "0")) (
display .setTe*t( "3");
return ;
}
display .setTe*t( display .getTe*t() + "3");
} elseif (e.getSource() ==b_4) (
if (display .getTe*t().equals( "4")) (
display .setTe*t( "1");
return
}
display .setTe*t( display .getTe*t() + "4");
} elseif (e.getSource() ==b_5) (
if (display .getTe*t().equals( "5")) (
display .setTe*t( "1");
return ;
}
display .setTe*t( display .getTe*t() + "5");
} elseif (e.getSource() ==b_6) (
if (display .getTe*t().equals( "6")) (
display .setTe*t( "1");
return ;
}
display .setTe*t( display .getTe*t() + "6");
} elseif (e.getSource() ==b_7) (
if (display .getTe*t().equals( "7")) (display .setTe*t( "1");
return
}
display .setTe*t( display .getTe*t() + "7");
} elseif (e.getSource() ==b_8) (
if (display .getTe*t().equals( "8")) (display .setTe*t( "1");
return ;
}
display .setTe*t( display .getTe*t() + "8");
} elseif (e.getSource() ==b_9) (
if (display .getTe*t().equals( "9")) (display .setTe*t( "1");
return ;
display .setTe*t( display .getTe*t() + "9");
} elseif (e.getSource() ==b_0) (
if (display .getTe*t().equals( "0")) (display .setTe*t( "0");
return ;
}
display .setTe*t( display .getTe*t() + "0");
} elseif (e.getSource() == b_deng ) (shu_2 = display .getTe*t();
display .setTe*t("");
int shu1
int shu2 ;
shu1 = Integer. valueOf (shu_1);
shu2 = Integer. valueOf (shu_2);
switch (fuhao) (
shul += shu2
break
case "x "
shul *= shu2
break
case "-"
shul -= shu2
break
case ":"
shul /= shu2
break
}
display .setTe*t(String. valueOf (shul));
shu_1 = "0"
shu_2 = "0"
} elseif (e.getSource() == b_dian) (display .setTe*t(".");
} elseif (e.getSource() == b_jia) (shu_1 = display .getTe*t();
display .setTe*t( "0");fuhao = "+"
} elseif (e.getSource() == chuhao ) (shu_1 = display .getTe*t();
display .setTe*t( "0");fuhao =":"
} elseif (e.getSource() == b_cheng ) (shu_1 = display .getTe*t();
display .setTe*t( "0");fuhao = "x "
} elseif (e.getSource() == b_jian) (shu_1 = display .getTe*t();
display .setTe*t( "0");
fuhao ="-"
}
}
}
}
展开阅读全文