黑马程序员之 --- GUI

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

GUI(图形用户界面)

GUI

Graphical User Interface(图形用户接口)

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

CLI

Command line User Interface (命令行用户接口)

就是常见的Dos命令行操作。

需要记忆一些常用的命令,操作不直观。

举例:

比如:创建文件夹,或者删除文件夹等

JavaGUI提供的对象都存在java.Awtjavax.Swing两个包中。

awtswing包的概述

java.awtAbstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。

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

GUI第一个案例

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

Window常用子类:Frame  Dialog

简单的窗体创建过程:

Frame  f = new Frame(my window);

f.setLayout(new FlowLayout());

f.setSize(300,400);//设置窗体大小

f.setLocation(300,200);//设置窗体出现在屏幕的位置

f.setVisible(true);

构造方法:

 public Frame(String title) 构造一个新的、最初不可见的、具有指定标题的 Frame 对象。

 public void setBounds(int x, int y, int width, int height)移动组件并调整其大小。

 由 和 指定左上角的新位置,由 width 和 height 指定新的大小。

案例:

public class FrameDemo2 {

public static void main(String[] args) {

//创建窗体 

//设置标题

//Frame frame = new Frame();

//frame.setTitle("优化版本");

Frame frame = new Frame("优化版本");

//设置尺寸

//设置位置

//frame.setSize(400, 200);

//frame.setLocation(100, 100);

frame.setBounds(100, 100, 400, 200);

//显示窗体

frame.setVisible(true);

}

}

 

时间监听机制:

1:确定事件源(容器或组件)

2:通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

3:该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

4:一般用匿名内部类来表示。

在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

5:事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

 

事件源 被触发 事件的 对象   (银行)

事件 要激活的操作 (抢劫)

事件处理 对激活的事件进行处理(抓起来,枪毙)

事件监听器 监听事件源即将发生的事件(警察,监控器 )

 

人去银行案例:

 

事件源: 

银行

事件:

interface 事件接口 {

void 抢劫();

void 取钱();

void 存钱();

}

事件处理:

class 事件处理 implements 事件接口 {

public void 抢劫(){

     SOP( 抓起来,枪毙 );

}

public void 取钱(){

     SOP( 放行 );

}

public void 存钱(){

     SOP( 放行 );

}

}

 

事件监听器:

警察,监控器

-------------------------------------------------------

人去银行案例:

 

事件源: 

银行

事件:

interface 事件接口 {

void 抢劫();

void 取钱();

void 存钱();

}

事件处理:

abstract class 事件处理 implements 事件接口 {

public void 抢劫(){

     //SOP( 抓起来,枪毙 );

}

public void 取钱(){

     //SOP( 放行 );

}

public void 存钱(){

     //SOP( 放行 );

}

}

事件适配器类:

class 事件适配器类 extends 事件处理 {

public void 抢劫(){

     SOP( 抓起来,送到警察局);

}

}

 

事件监听器:

警察,监控器

public class FrameDemo2 {

public static void main(String[] args) {

// 创建窗体

Frame frame = new Frame("事件适配器版本");

// 设置尺寸与位置

frame.setBounds(100, 100, 400, 200);

 

// 为窗口添加事件监听

// frame.addWindowListener(new MyWindowListener());

// frame.addWindowListener(new WindowListener)

// 适配器方式

frame.addWindowListener( new WindowAdapter() {

 

@Override

public void windowClosing(WindowEvent e) {

// 退出Java虚拟机

System.exit(0);

}

});

 

// 显示

frame.setVisible(true);

}

}

适配器案例:

按钮点击事件:

public class ButtonDemo {

public static void main(String[] args) {

//创建窗体

Frame frame = new Frame("按钮点击");

frame.setBounds(200, 200, 200, 200);

//为窗体添加窗体监听

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

//退出JVM

System.exit(0);

}

});

//--------------------------------

//创建按钮

Button btn = new Button("点我呀~");

//为按钮添加事件监听

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//点击按钮时触发该方法

System.out.println("哎呀,疼");

}

});

//把按钮添加到窗体中

frame.add(btn);

frame.setVisible(true);

}

}

把数据通过文本框转移到文本域:

/*

  把数据通过文本框转移到文本域 

  方法:

   setsetLayout( new FlowLayout()); //更该窗体布局方式

  TextField:文本框  

  TextArea: 文本域

   方法: 

   public String getText() 获取文本数据

   public void setText(String str) 设置文本数据

   public void append(String str) 在原有数据的基础上,添加新数据

 */

public class TextDemo {

public static void main(String[] args) {

Frame frame = new Frame("文本框转移到文本域");

frame.setBounds(200, 200, 400, 300);

//更改窗体布局

frame.setLayout(new FlowLayout());//流式布局

//---------------------------

//创建一个文本框

final TextField textField = new TextField(40);

//添加到窗体中

frame.add(textField);

//创建一个按钮

Button btn = new Button("转到");

//添加到窗体中

frame.add(btn);

//创建一个文本域(多行文本框)

final TextArea textArea = new TextArea(13, 45);

//添加到窗体中

frame.add(textArea);

//----------------------------

//添加按钮点击监听

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//获取文本框中的数据

String data = textField.getText();

//System.out.println(data);

//清空文本框中的原有数据

textField.setText("");

//把数据存放到 下面的文本域中

//textArea.setText(data);

textArea.append(data+"\n");

}

});

//添加窗体监听

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

frame.setVisible(true);

}

}

鼠标监听事件:

public class MouseDemo {

public static void main(String[] args) {

final Frame frame = new Frame("演示鼠标事件");

frame.setBounds(200, 200, 400, 300);

//改变窗体布局

//frame.setLayout(new FlowLayout());

frame.setLayout(null);//帧布局

//-----------------------

Button blueButton = new Button("蓝色");

blueButton.setBounds(100, 100, 50, 50);

frame.add(blueButton);

Button redButton = new Button("红色");

redButton.setBounds(200, 100, 50, 50);

frame.add(redButton);

 

//-----------------------

//为按钮添加鼠标监听

blueButton.addMouseListener(new MouseAdapter() {

//进入到某一个组件上时激活

@Override

public void mouseEntered(MouseEvent e) {

//窗体的背景蓝色

frame.setBackground(Color.BLUE);

}

//离开某一个组件时激活

@Override

public void mouseExited(MouseEvent e) {

//窗体的背景白色

frame.setBackground(Color.WHITE);

}

});

//为按钮添加点击监听

blueButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("蓝色");

}

});

redButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("红色");

}

});

//为窗体添加事件监听

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

//退出JVM

System.exit(0);

}

});

frame.setVisible(true);

}

}

 

 键盘事件:录入QQ号码,如果不是数字就不让录入

/*

 * 

 * KeyListener: 接收键盘事件的接口

 * KeyAdapter :接收键盘事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。 

 *  public void keyPressed(KeyEvent e)按下某个键时调用此方法。 

 *  参数:KeyEvent 表示组件中发生键击的事件。

 * KeyEvent类

 *  public char 返回与此事件中的键关联的字符

 *  public void consume()使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。

 * Label: 标签: 

 */

public class KeyDemo {

public static void main(String[] args) {

//创建窗体

Frame frame = new Frame("录入QQ号码");

//设置尺寸与位置

frame.setBounds(200, 200, 400, 300);

//设置布局方式

frame.setLayout(null);//帧布局

//------------------------

//创建标签

Label label = new Label("录入QQ号码:");

label.setBounds(100, 100, 200, 30);

//添加到窗体中

frame.add(label);

//创建文本框

TextField textField = new TextField(40);

textField.setBounds(100, 130, 200, 30);

//添加到窗体中

frame.add(textField);

//------------------------

//为文本框添加键盘事件监听

textField.addKeyListener(new KeyAdapter() {

//按下某个键时调用此方法

@Override

public void keyPressed(KeyEvent e) {

//获取到键盘输入的字符

char ch = e.getKeyChar();

//System.out.println(ch);

//判断当前字符是否在'0'到'9'之间

if (ch >= '0' && ch <= '9') {

//正常显示

System.out.println(ch);

} else {

//不让字符在窗口中显示

System.out.println("被阻止显示:" + ch);

e.consume();//阻止

}

}

});

//为窗体添加事件监听

frame.addWindowListener(new WindowAdapter() {

 

@Override

public void windowClosing(WindowEvent e) {

//退出JVM

System.exit(0);

}

});

//显示

frame.setVisible(true);

}

}

菜单组件概述

MenuBar,Menu,MenuItem

先创建菜单条,再创建菜单,每一个菜单中建立菜单项。

也可以菜单添加到菜单中,作为子菜单。

通过setMenuBar()方法,将菜单添加到Frame中。

public class MenuDemo2 {

public static void main(String[] args) {

final Frame frame = new Frame("多层菜单");

//获取窗口的标题

final String title = frame.getTitle();

frame.setBounds(100, 100, 400, 200);

//----------------------

//创建菜单栏

MenuBar menuBar = new MenuBar();

//创建菜单

Menu fileMenu = new Menu("文件");

Menu titleMenu = new Menu("更改标题");

//创建菜单项

final MenuItem mi1 = new MenuItem("好好学习");

final MenuItem mi2 = new MenuItem("天天向上");

final MenuItem mi3 = new MenuItem("恢复标题");

final MenuItem mi4 = new MenuItem("退出");

//组成完整菜单

titleMenu.add(mi1);

titleMenu.add(mi2);

titleMenu.add(mi3);

fileMenu.add(titleMenu);

fileMenu.add(mi4);

menuBar.add(fileMenu);

frame.setMenuBar(menuBar);

//---------------------

//为菜单项添加事件监听

//好好学习

mi1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

frame.setTitle(mi1.getLabel());

}

});

//天天向上

mi2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

frame.setTitle(mi2.getLabel());

}

});

//恢复标题

mi3.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

frame.setTitle(title);

}

});

//退出

mi4.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

//----------------------

frame.setVisible(true);

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值