????????????????????????????????????? ???????????? ?swing登陆界面开发
??????
????? 一、swing是什么?作用呢?
??????? Swing是一个用于开发Java应用程序用户界面的开发工具包。我们利用Swing丰富、灵活的功能和模块化组件,使得我们用很少的代码就可以创建优雅的用户界面。 工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event
?????
?? ?二、swing登陆界面开发步骤:
???? 1.构造一个顶层容器JFrame的窗体对象
???? 2、设置该窗体的一些属性,如大小、标题
???? 3、设置该窗体的布局方式
???? 4、添加组件到窗体上
???? 5、最后才能写上让窗体显示出来的代码?
?
?
????????????????????????????????????????? ????????????? ?类的继承
????? 一、子类继承的作用: 提高代码的重用性,减少劳动量
?????
???? ?二、子类的继承格式:
??????????? public class 子类名 extends 父类名
????? extends是关键字,表示继承
????? java中的继承是单继承,子类只能继承一个父类
?????
????? 三、子类能从父类中继承到所有的属性和方法
?????
???? ?四、子类也可以重写父类中的方法和定义自己特有的方法和属性,这也是子类之所以存在的原因。
????? 特别注意的是,如果父类中已经定义了构造方法,而不是默认的无参构造器,此时创建子类时也要定义构造器方法,否则会报错。
????? 子类调用重写的方法时,会优先调用子类定义的方法。如果想调用父类的方法,可以使用super.方法名();
????
??????? 五、java中的自动转型时是为了扩大对象的使用范围
????
??????? 六、多态的产生是由方法的重载和重写,类的继承引起的
?
? swing登陆界面开发练习:
?1.QQ登录界面
?2.计算器界面
? 类的继承练习:
1.回合制游戏:奥特曼和小怪兽要战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!
??奥特曼除了可以打小怪兽外,还可以攻击其他的奥特曼对象。
??小怪兽除了可以打奥特曼外,还可以攻击其他的小怪兽对象。
??
??1.找出这个场景中的对象
??2.找出每一个对象的特征和行为
??3.根据类的格式和对象的特性与行为定义一个class
??4.定义主函数的类,实例化对象和调用方法
QQ登陆界面代码:
package lesson5;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
//建立一个QQFrame类
public class QQLogin {
???? // 程序入口
??public static void main(String[] args) {
???QQLogin qq = new QQLogin();
???qq.showLogin();
??????? }
??
??// 显示一个加有多个组件的窗体界面
??public void showLogin() {
???// 构造一个窗体对象
???javax.swing.JFrame login = new javax.swing.JFrame();
???//设置背景图片
???addBackgroundImage(login);
???// 设置标题
???login.setTitle("QQ 2013");
???// 创建流式布局管理器对象
???java.awt.FlowLayout fl = new java.awt.FlowLayout();
???login.setLayout(fl);
???//创建面板对象并设置大小
???javax.swing.JPanel jpanel1=new javax.swing.JPanel();
???jpanel1.setPreferredSize(new Dimension(400,120));
???javax.swing.JPanel jpanel2=new javax.swing.JPanel();
???jpanel2.setPreferredSize(new Dimension(250,150));
???javax.swing.JPanel jpanel3=new javax.swing.JPanel();
???jpanel3.setPreferredSize(new Dimension(100,150));
???javax.swing.JPanel jpanel4=new javax.swing.JPanel();
???jpanel4.setPreferredSize(new Dimension(200,70));
???javax.swing.JPanel jpanel5=new javax.swing.JPanel();
???jpanel5.setPreferredSize(new Dimension(150,70));
???//设置面板布局
???jpanel2.setLayout(new FlowLayout(FlowLayout.LEFT));
???//创建一个标签元素
???javax.swing.JLabel jla_title = new javax.swing.JLabel("QQ 2013");
???jla_title.setFont(new Font("正楷",Font.BOLD,56));
???//将组件添加到面板1
???jpanel1.add(jla_title);
???// 创建2个标签元素:
???javax.swing.JLabel jla_ID = new javax.swing.JLabel("注册账号");
???javax.swing.JLabel jla_password = new javax.swing.JLabel("找回密码");
?
???//创建一个下拉框
???javax.swing.JComboBox jco=new javax.swing.JComboBox();
???jco.setEditable(true);//设置下拉框可以编辑
???jco.addItem("997188229");// 给下拉框添加数据
???jco.setPreferredSize(new Dimension(180, 25));//设置下拉框大小
???//创建一个密码框
???JPasswordField jpa=new JPasswordField();
???jpa.setPreferredSize(new Dimension(180,25));//设置密码框大小
???// 实例化复选框的对象
???JCheckBox jch1 = new JCheckBox("记住密码");
???JCheckBox jch2 = new JCheckBox("自动登录");
???//将组件元素添加到面板2
???jpanel2.add(jco);
???jpanel2.add(jla_ID);
???jpanel2.add(jpa);
???jpanel2.add(jla_password);
???jpanel2.add(jch1);
???jpanel2.add(jch2);
???//创建图片
???javax.swing.ImageIcon ima=new javax.swing.ImageIcon();
???javax.swing.JLabel jla_ima = new javax.swing.JLabel(ima);
???jpanel3.add(jla_ima);
???// 实例化一个ImageIcon的图标对象
???ImageIcon image = new ImageIcon("src/image/girl.jpg");
???// 实例化一个标签对象
???JLabel jlaImage = new JLabel(image);
???// 将标签对象添加到面板上
???jpanel3.add(jlaImage);
???// 创建三个按钮
???javax.swing.JButton jbu_login = new javax.swing.JButton("登陆");
???javax.swing.JButton jbu_muchID= new javax.swing.JButton("多账号");
???javax.swing.JButton jbu_set= new javax.swing.JButton("设置");
???jpanel4.add(jbu_muchID);
???jpanel4.add(jbu_set);
???jpanel5.add(jbu_login);
???// 将面板组件加到窗体上
???login.add(jpanel1);
???login.add(jpanel3);
???login.add(jpanel2);
???login.add(jpanel4);
???login.add(jpanel5);
???login.setSize(400, 400);// 设置窗体大小
???//面板设置为透明
???jpanel1.setOpaque(false);
???jpanel2.setOpaque(false);
???jpanel3.setOpaque(false);
???jpanel4.setOpaque(false);
???jpanel5.setOpaque(false);
???
???login.setDefaultCloseOperation(3);// 窗体关闭时程序退出
???login.setResizable(false);//设置窗体为不可以调整大小
???login.setVisible(true);// 让窗体显示出来,这句要放在最后面
?????
??}
??/**
?? * 给窗体添加背景图标
?? *
?? * @param login窗体的对象
?? */
??public void addBackgroundImage(JFrame login) {
???// 实例化一个ImageIcon的图标对象
???ImageIcon image = new ImageIcon("src/image/bluesky.jpg");
???// 实例化一个标签对象
???JLabel background = new JLabel(image);
???// 设置标签显示的位置和标签的大小
???background.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());
???//将标签添加到窗体的第二层面板上
???login.getLayeredPane().add(background,new Integer(Integer.MIN_VALUE));
???//获取窗体的第一层面板对象
???JPanel contentPanel = (JPanel)login.getContentPane();
???//设置第一层面板为透明
???contentPanel.setOpaque(false);
??}
??
}
?
?
<!--EndFragment--><!--EndFragment-->?
计算器代码:
???? package lesson5;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
//建立一个Counter类
public class Counter {
?/**
? * 程序运行的入口点
? */
?public static void main(String[] args) {
??//实例化一个Class类的对象
??Counter cou=new Counter();
??//对象调用显示窗体的方法
??cou.showFrame();
?}
?public void showFrame(){
??//实例化一个窗体对象并且设置标题
??JFrame jf=new JFrame("简单计算器");
??//设置窗体的大小属性
??jf.setSize(200,330);
??//设置窗体的显示位置
??jf.setLocation(200,100);
??//设置窗体关闭时退出程序
??jf.setDefaultCloseOperation(2);
??//设置窗体布局方式
??jf.setLayout(new FlowLayout());
??//添加组件到jf窗体上
??jf.add(jp1());
??jf.add(jp2());
??jf.add(jp3());
??jf.add(jp4());
??//设置禁止调整窗体的大小
??jf.setResizable(false);
??//设置窗体为可见
??jf.setVisible(true);
??}
?//创建面板1的方法
??public JPanel jp1(){
???//实例化一个JPanel类的对象
???JPanel jpanel1=new JPanel();
???//设置对象面板的大小
???jpanel1.setPreferredSize(new Dimension(200,40));
???//实例化一个文本输入框对象
???JTextField jte=new JTextField(15);
???//添加组件到对象中
???jpanel1.add(jte);
???return jpanel1;
??}
?//创建面板2的方法
?public JPanel jp2(){
??//实例化一个JPanel类的对象
??JPanel jpanel2=new JPanel();
??//设置对象面板的大小
??jpanel2.setPreferredSize(new Dimension(120,50));
??return jpanel2;
?}
?//创建面板3的方法
??? public JPanel jp3(){
??? ?//实例化一个JPanel类的对象
??? ???JPanel jpanel3=new JPanel();
??? ???//设置对象面板的大小
??? ???jpanel3.setPreferredSize(new Dimension(50,50));
??? ???//实例化一个按钮标签
??? ???JButton jb=new JButton("清除");
??? ???//添加组件到对象中
??? ???jpanel3.add(jb);
??? ???return jpanel3;
??? }?
? //创建面板4的方法
??? public JPanel jp4(){
??? ?//实例化一个JPanel类的对象
??? ???JPanel jpanel4=new JPanel();
??? ???//设置对象面板的大小
??? ???jpanel4.setPreferredSize(new Dimension(200,200));
??? ???//设置jpanel4的布局方式
??? ???jpanel4.setLayout(new? GridLayout(4,4));
??? ???//实例化16个按钮标签
??? ???JButton jb1=new JButton("7");
??? ???JButton jb2=new JButton("8");
??? ???JButton jb3=new JButton("9");
??? ???JButton jb4=new JButton("÷");
??? ???JButton jb5=new JButton("4");
??? ???JButton jb6=new JButton("5");
??? ???JButton jb7=new JButton("6");
??? ???JButton jb8=new JButton("×");
??? ???JButton jb9=new JButton("1");
??? ???JButton jb10=new JButton("2");
??? ???JButton jb11=new JButton("3");
??? ???JButton jb12=new JButton("-");
??? ???JButton jb13=new JButton(".");
??? ???JButton jb14=new JButton("0");
??? ???JButton jb15=new JButton("=");
??? ???JButton jb16=new JButton("+");
??? ???//添加按钮标签到面板4上
??? ???jpanel4.add(jb1);
??? ???jpanel4.add(jb2);
??? ???jpanel4.add(jb3);
??? ???jpanel4.add(jb4);
??? ???jpanel4.add(jb5);
??? ???jpanel4.add(jb6);
??? ???jpanel4.add(jb7);
??? ???jpanel4.add(jb8);
??? ???jpanel4.add(jb9);
??? ???jpanel4.add(jb10);
??? ???jpanel4.add(jb11);
??? ???jpanel4.add(jb12);
??? ???jpanel4.add(jb13);
??? ???jpanel4.add(jb14);
??? ???jpanel4.add(jb15);
??? ???jpanel4.add(jb16);
??? ???return jpanel4;
??? }
}
?
游戏:
? 思路分析:创建一个参与者Participant类,该类中有奥特曼和怪兽共同的属性:身份和血量;有共同的方法:要战斗。????? 再创建奥特曼Ultraman类和怪兽Monster类,这两个类都继承Participant类,然后分别重写父类Participant类中的战斗方法。??? 然后再创建一个Game类,用来创建实例化上述类的对象,写入程序运行的入口点。
?? 代码:
package lesson6;
//定义一个参与者类Participant
public class Participant{
//参与者身份属性
protected String ident;
//参与者血量属性
private int blood;
//带两个参数的构造器方法
public Participant(String a,int b){
? this.ident=a;
? this.blood=b;
}
?//定义一个设置参与者身份的方法
public void setIdent(String st){
? ident=st;
}
//定义一个获取参与者身份的方法
public String getIdent(){
?? return ident;
}
//定义设置血量的方法
public void setBlood(int bl){
?blood = bl;
}
//获取血量的方法
public int getBlood(){
?return blood;
}
//定义一个参与者与另一个参与者的战斗方法
public void fight(Participant par){
?par.setBlood(par.getBlood() - 1);
????? System.out.println(ident+"攻击了"+par.getIdent()+","+par.getIdent()+"剩余的血量是"+par.getBlood());
}
}
?
package lesson6;
public class Ultraman extends Participant{
?
?
?public Ultraman(String a, int b) {
??super(a, b);
??// TODO Auto-generated constructor stub
?}
?//定义奥特曼与奥特曼之间的战斗方法
?public void fight(Ultraman ult){
??ult.setBlood(ult.getBlood()-3);
??????? System.out.println(ident+"攻击了"+ult.getIdent()+" ,"+ult.getIdent()+"的剩余血量为"+ult.getBlood());??
?}
}
package lesson6;
public class Monster extends Participant{
?public Monster(String a, int b) {
??super(a, b);
??// TODO Auto-generated constructor stub
?}
?//定义怪兽和怪兽的战斗方法
??? public void fight(Monster mon){
?mon.setBlood(mon.getBlood()-2);
??? System.out.println(ident+"攻击了"+mon.getIdent()+" ,"+mon.getIdent()+"的剩余血量为"+mon.getBlood());
}
}
package lesson6;
public class Game {
?/**
? * @param args
? */
?public static void main(String[] args) {
??// 创建并初始化一些对象
??Ultraman ult1=new Ultraman("奥特曼1号",15);
??Ultraman ult2=new Ultraman("奥特曼2号",10);
??Monster mon1=new Monster("怪兽1号",10);
??Monster mon2=new Monster("怪兽2号",12);
???? //奥特曼1号与奥特曼2号之间的战斗
??????? for(int i=1;i<5;i++){
????????????
??????????? //奥特曼1号调用战斗方法
??????????? ult1.fight(ult2);
??????????? //奥特曼2号调用战斗方法
??????????? ult2.fight(ult1);
????????? }
?????? //输出两个奥特曼之间的战斗结果
?????? System.out.println("奥特曼1号与奥特曼2号之间的战斗结果:");
???????
?????? if(ult1.getBlood()<=0)?? System.out.println("胜者是"+ult2.getIdent());
?????? else if(ult2.getBlood()<=0)? System.out.println("胜者是"+ult1.getIdent());
?????????? else???? System.out.println("平局");
?????? //两个怪兽之间的战斗
?????? for(int i=1;i<6;i++){
???????????
?????????? //怪兽1调用战斗方法
?????????? mon1.fight(mon2);
?????????? //怪兽2调用战斗方法
?????????? mon2.fight( mon1);
???????? }
????? //输出两个怪兽之间的战斗结果
????? System.out.println("两个怪兽之间的战斗结果:");
??????
????? if( mon1.getBlood()<=0)?? System.out.println("胜者是"+mon2.getIdent());
????? else if(mon2.getBlood()<=0)? System.out.println("胜者是"+ mon1.getIdent());
????????? else???? System.out.println("平局");
????? //设置奥特曼1号和怪兽1号的血量
????? ult1.setBlood(15);
????? mon1.setBlood(10);
????? //奥特曼1与怪兽1之间的战斗
????? for(int i=1;i<11;i++){
??????????
????????? //奥特曼1调用战斗方法
????????? ult1.fight(mon1);
????????? //怪兽1调用战斗方法
????????? mon1.fight(ult1);
??????? }
???? //输出奥特曼1与怪兽1之间的战斗结果
???? System.out.println("奥特曼1与怪兽1之间的战斗结果:");
?????
???? if(ult1.getBlood()<=0)?? System.out.println("胜者是"+mon1.getIdent());
???? else if(mon1.getBlood()<=0)? System.out.println("胜者是"+ult1.getIdent());
???????? else???? System.out.println("平局");
?}
}