package netjava1.接口与类的区别0110;
/**
* 定义person的接口
* @author hxp
*
*/
public interface Person {
/*
* 在接口里定义一个 static final 的常量
*/
public static final int age =100;
/*
* 定义一个public 的抽象方法 没有方法体
*/
public void eat();
}
/**
* 难点:接口的作用
* 1.虽然不能创建对象new Person()(因为没有构造函数)但是可以定义该数据类型的变量 Person p
* 2.可以当做父类
*/
/**
* 接口的特点:
* 接口里定义的都是公共常量 定义一个常量age 常量就是必须要赋给他初始值final
* 接口里的方法全部都是抽象方法 (即 没有方法体 没有{})
*/
package netjava1.接口与类的区别0110;
/**
* 定义一个student类实现接口
* @author hxp
*
*/
public class Student implements Person {
/*
* 定义一个学生的年龄属性
*/
public int age = 50;
private String name;
/*
* 定义一个设置学生姓名的方法
*/
void setName(String name){
this.name = name;
}
/*
* 定义一个学生的学习方法
*/
void study(){
System.out.print(" 学生在学习");
}
/*
* 难点:一个类实现了一个接口就必须改写里面的所有方法 而且默认继承接口的属性
*/
public void eat(){
System.out.println("学生在食堂吃饭");
}
}
/**
* 定义一个UNstudent类 继承Student类
* @author hxp
*
*/
public class UNstudent extends Student{
/*
* 定义大学生的姓名属性 改写接口里的age属性
*/
public int age=80;
void study(){
System.out.println("大学生挂在高数上了");
}
}
/**
package netjava1.接口与类的区别0110;
public class Test {
public static void main(String args[]) {
// 创建学生对象
Student stu = new Student();
stu.setName("张香利");
stu.study();
// 创建大学生对象
UNstudent stu1 = new UNstudent();
stu1.setName("胡晓培");
stu1.study();
// 子类对象的类型可以自动转成父类类型
// 自动转型
Student stu2 = new UNstudent();
stu2.setName("毛文杰");
stu2.study();
Person p = new Student();
p.eat();
System.out.println(stu.age);//50
System.out.println(stu1.age);//80
System.out.println(stu2.age);//50
System.out.println(p.age);//100
}
}
/**
* 知识点:
* 类与接口的区别:
* 1、类可以生成对象 接口不能
* 2、类实现接口用implements关键字
* 3、一个类只能继承一个父类 但可以实现多个接口
*/
/**
* 继承与实现的区别:
* 实现必须改写接口所有方法 继承 不是必须改写父类方法
*/
//
//
//
package netjava1.两个登录界面画板0110;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
/**
* 制作QQ登录界面
*
* @author 胡晓培
*
*/
public class login extends JFrame{
public static void main(String args[]) {
// 创建窗体
login jf = new login();
jf.initlogin();
}
void initlogin(){
// 设置窗体的标题
this.setTitle("QQ2011");
this.setSize(345, 290);
// 加上这句话表示默认退出
this.setDefaultCloseOperation(3);
// 设置流式布局管理器
java.awt.FlowLayout layout = new java.awt.FlowLayout(
java.awt.FlowLayout.LEFT, 0, 0);//q2:注意去看jdk里的构造方法
// 把流式布局管理器放进窗体
this.setLayout(layout);
// 加入图片topPic
// 先将其变成图标ImageIcon 建立图标对象icon1
javax.swing.ImageIcon icon1 = new javax.swing.ImageIcon("扣扣.jpg");
// 把图片插入
JLabel topPic = new JLabel(icon1);// 错点1:创建图标标签 要传入图标作为参数
this.add(topPic);
//添加一个菜单条
javax.swing.JMenuBar bar = new javax.swing.JMenuBar();
//添加一个菜单
javax.swing.JMenu jm1 = new javax.swing.JMenu("1 ");
javax.swing.JMenu jm2 = new javax.swing.JMenu("2 ");
javax.swing.JMenu jm3 = new javax.swing.JMenu("3 ");
bar.add(jm1);
bar.add(jm2);
bar.add(jm3);
this.setJMenuBar(bar);
// 加入图片secPic
// 先将其变成图标 建立图标对象 图标->标签->标签加到窗体
javax.swing.ImageIcon icon2 = new javax.swing.ImageIcon("qq2.jpg");
// 把图片插入
JLabel secPic = new JLabel(icon2,JLabel.CENTER);// 错点1:创建图标标签 要传入图标作为参数
this.add(secPic); // 错点2:left是jlabel的静态变量所以要用类名调用
// 错点3:是要把流式布局管理器左对齐 因为图片在label里
// 加入文本输入框 txtFild
javax.swing.JTextField txtFild=new javax.swing.JTextField(18);
this.add(txtFild);
// 加入文本标签“注册”nameLabel1
JLabel nameLabel1 = new JLabel(" 注册 ");
this.add(nameLabel1);
// 加入密码输入框passFild
javax.swing.JPasswordField passFild=new javax.swing.JPasswordField(20);
this.add(passFild);
//设置密码显示的样式
passFild.setEchoChar('●');
// 加入文本标签“找回”namelabel2
JLabel nameLabel2 = new JLabel("找回");
this.add(nameLabel2);
//建立“登录”按钮jb2
javax.swing.JButton jb2 = new javax.swing.JButton("登录");
this.add(jb2);
//建立复选框“记住密码”cb1
javax.swing.JCheckBox cb1 = new javax.swing.JCheckBox("记住密码");
this.add(cb1);
//建立复选框“自动登录”cb2
javax.swing.JCheckBox cb2 = new javax.swing.JCheckBox("自动登录");
this.add(cb2);
String items[] = {"我在线上","Q我吧","离开","忙碌","请勿打扰","隐身"};
//建立下拉菜单JComboBox“”里面放 string的 这个items数组
javax.swing.JComboBox box = new javax.swing.JComboBox(items);
//设置
Dimension dim = new Dimension(90,20);
box.setPreferredSize(dim);
this.add(box);
//创建一个登录按钮监听器的对象
loginlistener lis = new loginlistener(txtFild,passFild,this);
//把监听器对象安装在登录按钮上
jb2.addActionListener(lis);
this.setVisible(true);
}
}
/**
* 1. Dimension这个类是设置组件的宽度和高度
* setsize是设置窗体jframe的 设置其他组件的size都是用这个类
* 具体实现是
* //先建立一个dimension对象
* Dimension dim = new Dimension(90,20);
* //然后在这个组件里有一个方法叫 setPreferredSize 就可以设置组件的大小了
* box.setPreferredSize(dim);
*/
/**
* 2.错点: 加菜单条JMenuBar上去的时候
* 是加到窗体上 jf.setJMenuBar(bar);
* 有专门的语句 而不是加组件的 add
*/
/**
* //父类对象不能调用子类的方法 所以 把jf设置成JFrame类型 jf.initlogin()会报错
*/
package netjava1.两个登录界面画板0110;
/**
* 一个登录按钮监听器的类 实现接口ActionListener
*/
import java.awt.event.ActionEvent;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class loginlistener implements java.awt.event.ActionListener{
/*
* 定义账号和密码 用来承接 输入的账号和密码
*/
private JTextField jt1;
private JPasswordField jt2;
private login jf;
/*
* 改写他的构造函数
*/
public loginlistener(JTextField jt1,JPasswordField jt2,login jf){
this.jt1 = jt1;
this.jt2 = jt2;
this.jf = jf;
}
/*
*实现 ActionListener里的方法
*/
public void actionPerformed(ActionEvent e) {
/*
* 调用文本输入框的gettext函数 来得到 输入的账号和密码
*/
String name = jt1.getText();
String pwd = jt2.getText();
/*
* 打印账号和密码到java界面上
*/
System.out.print("账号:"+name+"\n"+"密码:"+pwd);
//现在要判断一下他输入的是不是 我想要的 如果是 则弹出画板界面
if(name.equals("")&&pwd.equals("")){
DrawFrame df = new DrawFrame();
df.initDrawFrame();
jf.setVisible(false);
}
//若不是 则弹出错误框
else{
javax.swing.JOptionPane.showMessageDialog(null, "账号或者密码错误,请检查!");
}
}
}
/**
* 难点1:监听器里的方法在创建对象的时候就自动调用了
* 难点2:ActionEvent e暂时还没有用到
* 难点3:要获得文本区域输入的文字 就要用文本对象来调用gettext
* 难点4:因为txtfild 和 passfild都是login.java里的 所以为了在这里使用只能重载构造函数
* 难点5:这里的jt1 和jt2 分别是 JTextField JPasswordField类型 而非 string类型
* 因为 我们是在 单击这个登录按钮的时候 才将 内容传入并打印出来的
* 若 在构造函数中 直接设成 string类型 则表明 把监听器 安到按钮上去的时候 内容就传进来了
*/
/**
* 事件监听机制的理解
* 在这个例子中 监听器是放在登录按钮上
* 从安装上监听器开始,监听器始终处于工作状态(即建立好监听器对象)
* 知道按下登录按钮 监听器对象开始自动调用方法 实现它的功能
*/
/**
* 如何在两个类中共用同一个对象
* 为了把另一个类中的对象JTxtFild用到另一个类中 就要在该类中设置参数jt1来接收这个对象
* 所以就需要重载构造函数public loginlistener(JTextField jt1,JPasswordField jt2)
* 来把这个对象JTxtFild 传进来
* 然后才能在类的方法里用到这个共用的对象
*/
这是学java的第四天 我是从2012年1月7日开始在蓝杰学java
感觉很好 继续努力
就像一个小蜗牛 慢慢的一点一点的留下自己的轨迹
虽然很慢 但是收获颇丰