您的位置:首页 > 产品设计 > UI/UE

黑马程序员_Java_GUI

2015-03-08 11:43 232 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、GUI概述

1、 GUI:Graphical User Interface(图形用户接口)。

用图形的方式,来显示计算机的操作图形界面。方便、直观。

CLI:Command line User Interface(命令行用户接口),就是DOS 命令行操作,不直观。

2、 Java 为GUI 提供的对象,都存在java.Awt 和javax.Swing 两个包中。

Awt 与Swing:

java.Awt : (Abstract Window Toolkit,抽象窗口工具集),需要调用本地系统方法实现功能。属重量级控件。跨平台性较弱。

javax.Swing :在AWT 基础上,建立一套图形界面系统,其中提供了更多组件,而且完全由Java 实现。增强了可移植性,属轻量级控件。

开发时,制作图形化界面时,一般需要导入两个包:import java.awt.; 和import java.awt.event.;

3、 GUI继承关系图:



二、布局管理器

1、布局:容器中组件的排放方式。

2、 常见的布局管理器:

FlowLayout(流式布局管理器):从左到右的顺序排列。Panel 默认的布局管理器。

BorderLayout(边界布局管理器):东南西北中。Frame 默认的布局管理器。

GridLayout(网络布局管理器):规则的矩阵。

GardLayout(卡片布局管理器):选项卡。

GridBagLayout(网格包布局管理器):非规矩的矩阵。

三、Component

1、 Component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。

2、 常用子类:Window、Panel(面板,不能单独存在)

Window 常用子类:Frame、Dialog

Frame 类:是带有标题和边框的顶层窗口。若显示窗体,必须设置setVisible 显示。设置Frame 时,有一个默认的管理器是边界式布局(BorderLayout)。

3、 方法

add() //添加组件(含参数)

setVisible(Boolean b) //根据参数的值来显示或隐藏组件

setSize() //设置窗体大小,参数为窗口的横坐标和纵坐标

setLocation() //设置窗体在本地位置,参数为横、纵坐标

setLayout() //设置布局管理器(参数可以是相应布局管理器的对象)

setBounds() //移动组件并调整其大小,参数是4 个坐标(左边距、右边距、宽、高)

addMouseListener() //添加指定的鼠标监听器

addKeyListener() //添加键盘监听事件

4、 创建图形化界面的步骤:

1)创建frame 窗体。

2)对窗体进行基本设置。比如大小,位置,布局。

3)定义组件。

4)将组件通过窗体的add 方法添加到窗体中。

5)让窗体显示,通过setVisible(true)

代码示例:

package demo.awt;

import java.awt.*;
import java.awt.event.*;

public class FrameDemo {

private Frame f;
private Button but;
FrameDemo(){
init();
}

public void init(){
f=new Frame("my frame");//新建Frame,标题为my frame
f.setBounds(300,100,600,500);//设置边界
f.setLayout(new FlowLayout());//设置模式
f.setVisible(true);//设置为可见
}

public static void main(String[] args) {
new FrameDemo();
}

}


四、事件监听机制

1、 事件监听机制组成:事件源、事件(Event)、监听器(Listener)、事件处理(引发事件后处理方式)。

(1)事件源(组件):awt或swing包中的那些图形界面组件

(2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件

(3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到侦听器中。

(4)事件处理:引发事件后的处理方式。

2、 事件监听机制流程图



3、 使用说明

组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。

步骤:

(1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

(2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

代码示例:

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class AwtDemo {

public static void main(String[] args) {

Frame f=new Frame("my awt");
f.setSize(500, 100);//设置大小
f.setLocation(300, 200);//设置位置
f.setLayout(new FlowLayout());//设置布局模式
Button b=new Button("我是一个按钮");
f.add(b);
f.addWindowListener(new MyWin());//添加监听器
f.setVisible(true);
}

}

class MyWin extends WindowAdapter{
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}


五、Window(窗体)

1、 监听:addWindowListener():添加窗口事件监听器

2、 WindowListener接口,复写方法,实例化对象,才能使用。但它有一个已复写全部方法的子类WindowAdapter。

3、WindowAdapter:接收窗口事件的抽象适配器类。此类中的方法为空。它是一个没有抽象方法的抽象类,目的是不能创建对象。此类存在的意思是方便创建监听器对象。使用:因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。并覆盖了其中的所有方法,那么只要继承WindowAdapter,覆盖需要的方法即可。

方法:

windowActivated():激活窗口时调用。

windowClosed():当窗口已被关闭时调用。

windowClosing():窗口正处在关闭过程中时调用。

windowDeactivated():后置窗口时调用。

windowDeiconified():取消图标化窗口时调用。

windowGainedFocus():该 Window 被设置为聚焦 Window 时调用,聚焦 Window 意味着该 Window 或其某个子组件将接收键盘事件。

windowIconified():窗口最小化时调用。

windowLostFocus():该 Window 不再为聚焦 Window 时调用,不再为聚焦 Window 意味着键盘事件不再传递到该 Window 或其任意子组件。

windowOpened():打开窗口时调用。

windowStateChanged():窗口状态改变时调用。

代码示例:

package demo.awt;

import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class MyWindowDemo {

private Frame f;
private TextField tf;
private Button bt;
private TextArea ta;

private Dialog d;
private Label lab;
private Button okbt;

MyWindowDemo(){
init();
}

public void init(){//初始化窗口
f=new Frame("my window");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());

tf=new TextField(60);
bt=new Button("转到");
ta=new TextArea(25,70);

d=new Dialog(f, "提示信息-self",true);
lab=new Label();
okbt=new Button("确定");

d.add(lab);
d.add(okbt);
d.setBounds(400,200,240,150);
d.setLayout(new FlowLayout());

f.add(tf);
f.add(bt);
f.add(ta);
myEvent();
f.setVisible(true);
}

private void myEvent() {//事件监听函数

okbt.addActionListener(new ActionListener() {//按钮事件监听器

public void actionPerformed(ActionEvent e) {
d.setVisible(false);
}
});
d.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
d.setVisible(false);
}

});

bt.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
String path=tf.getText();
File file=new File(path);
if(file.exists()&&file.isDirectory()){
String[] dir=file.list();

for(String s:dir){
ta.append(s+"\n");
}
}
else{
String info="找不到"+path;
lab.setText(info);
d.setVisible(true);
}

}
});

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
}

public static void main(String[] args) {
new MyWindowDemo();
}

}


六、Button(按钮)

1、监听:addActionListener():添加指定的动作监听器

2、 ActionListener 接口:用于接收操作事件的监听器接口。是少数没有适配器接口的其中一个。

其中只有一个方法actionPerformed(),作用:发生操作时调用。

3、 代码示例:

bt.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
d.setVisible(false);
}
});


七、鼠标事件和键盘事件

7.1 鼠标事件

1、 MouseListener: 用于接收组件上“感兴趣的”鼠标事件(eg:按下、释放、单击、进入或离开)的监听器接口。有适配器。

2、 方法:

mouseClicked(MouseEvent e) //鼠标单击(按下并释放)

mouseEntered(MouseEvent e) //鼠标进入组件

mouseExited(MouseEvent e) //鼠标离开组件

mousePressed(MouseEvent e) //鼠标按下时

mouseReleased(MouseEvent e) //鼠标释放时

3、 MouseEvent: (适配器)

成员变量:static int mouse_clicked

方法:int getClickCount() //返回鼠标单击次数

7.2 键盘事件

1、 keyListener: 接收键盘事件的监听器接口。有适配器。

2、 方法:

keyPressed(keyEvent e) //按下某个键时调用此方法

keyReleased(keyEvent e) //释放某个键时调用此方法

keyTyped(keyEvent e) //键入某个键时调用此方法

3、 keyEvent: (适配器)

char getkeyChar() //返回与此事件中的键相关联的字符

int getkeyCode() //获取键盘对应的码

static String getKeyText(int keyCode) //通过码获取对应的键盘字符

InputEvent 类中isControlDown() //判断ctrl 键是否被按下

InputEvent 类中consume() //以非默认方式处理事件,屏蔽键

代码示例:

package demo.awt;

import java.awt.*;
import java.awt.event.*;

public class MouseAndKeyEvent {

private Frame f;
private Button but;
MouseAndKeyEvent(){
init();
}

public void init(){//初始化
f=new Frame("my frame");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
Button b=new Button("按钮");
f.add(b);
b.addMouseListener(new MouseAdapter() {//鼠标监听

public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入该组件");
}

});
b.addKeyListener(new KeyAdapter() {//键盘监听

public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==e.VK_A)
System.out.println("yiyang");
}

});
f.setVisible(true);
}

public static void main(String[] args) {
new MouseAndKeyEvent();
}

}


八、MenuBar(菜单栏)

1、 MenuBar 类: 封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与Frame 对象关联,可以调用该框架的setMenuBar 方法。

2、 主要方法:

add() //添加菜单栏

3、 关联类:

MenuItem 类:菜单项

MenuMenuMenuMenu类:菜单条

add() //将指定菜单项或者标签添加到菜单栏。

MenuBar包括Menu,Menu包括MenuItem、Menu(带箭头)。

代码示例:

package demo.awt;

import java.awt.*;
import java.awt.Event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyMenuDemo {

private Frame f;
private MenuBar mb;
private Menu m;
private MenuItem closeItem,openItem,saveItem;

MyMenuDemo(){
init();
}

private void init() {
f=new Frame("my window");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());

//添加菜单栏
mb=new MenuBar();
m=new Menu("文件");
closeItem=new MenuItem("退出");
openItem=new MenuItem("打开");
saveItem=new MenuItem("保存");
m.add(openItem);
m.add(saveItem);
m.add(closeItem);
mb.add(m);

f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}

private void myEvent() {//菜单点击事件
openItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
new FileDialog(f,"打开文件",FileDialog.LOAD).setVisible(true);

}
});
saveItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
new FileDialog(f,"保存文件",FileDialog.SAVE).setVisible(true);

}
});
closeItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
}
public static void main(String[] args) {
new MyMenuDemo();

}

}


九、Jar包双击执行

既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。

步骤如下:

1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;

2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件

3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。

4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令

5、此时双击即可执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: