一、接口
1、语法:
interface 接口名{
常量;
抽象方法;
}
2、抽象方法
抽象方法是用abstract关键字修饰的方法,并且只有方法头,没有方法体。
public interface Drive {
// public abstract void drive(){
// 错误,抽象方法没有方法体。
// }
}
public interface Drive {
public abstract void drive();
}
在接口,定义抽象方法可以省略abstract。
3、接口的作用
接口的作用就是强迫实现接口的子类实现接口中所有的抽象方法。
import javax.swing.*;
public class Login extends J implements Drive{
//如未重写drive()方法,将报错。
public void drive(){
}
}
二、类实现接口
1、语法
class 子类 implements 接口列表{
子类体;
}
说明:接口列表中可以同时有多个接口,以逗号分隔。
2、子类继承父类和实现接口的语法:
class 子类 extends 父类 implements 接口列表{
子类体;
}
三、图形界面
1、做界面
2、实现监听
1)使用类来实现监听的接口;
class 子类名 implements XXXListener{
}
2)在需要监听的组件添加监听器
需要添加监听器的组件.addaddActionListener(this);
3)在public void actionPerformed(ActionEvent arg0)中添加功能代码。
在此方法中带有一参数,此参数是用来判断监听的来源地,即用来判断是哪一个组件产生的事件。是通过调用getSource()方法来自动判断是哪个组件产生了事件。
3、添加菜单
1)添加菜单栏
将菜单栏添加到顶层容器中;
2)添加菜单
将菜单添加菜单栏中;
3)添加菜单项
将菜单项添加到菜单;
//Main
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Main extends J implements ActionListener{
JMenuBar mb;
JMenu menuModify;
JMenu menuHelp;
JMenuItem mItemName;
JMenuItem mItemPwd;
JLabel label;
public Main(){
this.setBounds(200, 200, 600, 450);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setTitle("主界面");
this.setLayout(null);
label = new JLabel("用户名和密码");
label.setBounds(0, 200, 400, 50);
this.getContentPane().add(label);
initMenu();
addMenu();
this.setVisible(true);
}
public void initMenu(){
mb = new JMenuBar();//生成菜单栏的对象
menuModify = new JMenu("修改");//生成菜单的对象
menuHelp = new JMenu("帮助");
mItemName = new JMenuItem("修改姓名");//生成菜单项的对象
mItemPwd = new JMenuItem("修改密码");
mItemName.addActionListener(this);//添加监听
mItemPwd.addActionListener(this);
}
public void addMenu(){
menuModify.add(mItemName);//将菜单项添加到菜单中
menuModify.add(mItemPwd);
mb.add(menuModify);//将菜单添加到菜单栏
mb.add(menuHelp);
mb.setBounds(0, 0, 450, 30);//设置菜单栏的大小
this.getContentPane().add(mb);//将菜单栏加入到顶层容器
}
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource() == mItemName){
label.setText("姓名:denghong");
}else{
if(arg0.getSource() == mItemPwd){
label.setText("123");
}
}
}
}
//Login
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Login extends J implements ActionListener{
JButton btnOK;
JButton btnCancel;
JLabel labelUser;
JLabel labelPwd;
JTextField txtUser;
JTextField txtPwd;
public Login(){
this.setBounds(200, 200, 400, 300);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setLayout(null);
this.setTitle("登录界面");
initCom();
addCom();
this.setVisible(true);
}
public void initCom(){
btnOK = new JButton("提交");
btnCancel = new JButton("重置");
labelUser = new JLabel("用户名");
labelPwd = new JLabel("密 码");
//设置默认用户
txtUser = new JTextField("denghong");
//设置密码
txtPwd = new JPasswordField();
}
public void addCom(){
this.getContentPane().add(btnOK);
btnOK.setBounds(90, 200, 80, 30);
btnOK.addActionListener(this);
this.getContentPane().add(btnCancel);
//添加监听
btnCancel.addActionListener(this);
btnCancel.setBounds(210, 200, 80, 30);
this.getContentPane().add(labelUser);
labelUser.setBounds(120, 60, 50, 30);
this.getContentPane().add(labelPwd);
labelPwd.setBounds(120, 100, 50, 30);
this.getContentPane().add(txtUser);
txtUser.setBounds(180, 60, 80, 30);
this.getContentPane().add(txtPwd);
txtPwd.setBounds(180, 100, 80, 30);
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//判断事件产来的来源
if(arg0.getSource() == btnCancel){
txtUser.setText("");//为编辑框赋值
txtPwd.setText("");
}else{
if(arg0.getSource() == btnOK){
//两个字符串判断是否相等,不能使用"==",只能使用equals方法进行判断
if(txtUser.getText().equals("denghong")
&& txtPwd.getText().equals("123")){
new Main();
}else{
txtUser.setText("");
txtPwd.setText("");
}
}
}
}
}
//Test
public class Test {
public static void main(String[] args) {
new Login();
// new Main();
}
}