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("平局");
}
}