关闭

黑马程序员——Java基础---GUi(第22天)

标签: 黑马程序员java
100人阅读 评论(0) 收藏 举报
分类:

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

图形化界面

一、概述

Awt与Swingjava.Awt:

Abstract WindowToolKit (抽象窗口工具包),

需要调用本地系统方法实现功能。属重量级控件。

javax.Swing:(图形界面是一个单独的线程)

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

二 、常用的布局

容器中的组件的排放方式,就是布局

常见的布局管理器:

•   FlowLayout(流式布局管理器)

•   从左到右的顺序排列。

•   Panel默认的布局管理器。

•   BorderLayout(边界布局管理器)

•   东,南,西,北,中

•   Frame默认的布局管理器。

•   GridLayout(网格布局管理器)

•   规则的矩阵

•   CardLayout(卡片布局管理器)

•   选项卡

•   GridBagLayout(网格包布局管理器)

•   非规则的矩阵

三、创建图形化界面的步骤

先将Java.awt包和java.awt.event包导入。

1、创建图形化界面步骤                  对应实例代码:

1,创建frame窗体。                    Frame f = newFrame("my awt");

2,对窗体进行基本设置。                f.setSize(500,400);

    比如大小,位置,布局。          f.etLocation(300,200);

f.setBounds(int x,int y,int with,int height);移动组件并调整其大小

f.setLayout(newFlowLayout())

3,定义组件。                 Button b = new Button("我是一个按钮");

4,将组件通过窗体的add方法添加到窗体中。f.add(b);

5,加载一个事件                           MyEvent();

6,让窗体显示,通过setVisible(true)       f.setVisible(true);

2、常用功能

void setMenuBar(MenuBar mb) 将此窗体的菜单栏设置为指定的菜单栏。

Compenent add(Compenent comp,intindex):将制定组件添加到此容器的指定位置上

其他常用功能:

FlowLayout;流式布局管理器

setFlowLayout(new FlowLayout());添加流式布局

TestField():添加文本框

TextArea(introw,in colume),构造一个文本区;

四、事件监听机制


事件监听机制的特点

1,事件源。  事件源就是awt包或者swing包中的那些图形界面组件。 

2,事件。      每一个事件源都有自己特有的对应事件和共性事件。

3,监听器。  将可以触发某一个事件的动作(多个 动作)都已经封装到了监听器中。

4,事件处理。这个事件处理就是我们需要做的部分。

以上三者,在java中都已经定义好了,直接获取其对象来用就可以了。我们要做的事情就是对产生的动作进行处理。

五、共性事件Component类

构造函数:

protected Component()构造一个新组件。

常用方法:

void addKeyListener(KeyListener l) 添加指定的按键侦听器

void addMouseListener(MouseListener l) 添加指定的鼠标侦听器

1、通用方法

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

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

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

覆盖方法的时候一般用匿名内部类来表示。

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

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

2、鼠标事件MouseListener

void addMouseListener(MouseListener l) 添加指定的鼠标侦听器

MouseAdapter:鼠标抽象适配器类

void mouseClicked(MouseEvent e) 鼠标按键在组件上单击(释放)时调用

void mouseEntered(MouseEvent e) 鼠标进入到组件上时调用。

void mouseExited(MouseEvent e) 鼠标离开组件时调用。

void mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用。

void mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用。

鼠标事件需要添加鼠标事件监听器,通过查阅发现方法void  MouseListener(MouseListener 1)中的参数MouseListener接口中有五个方法,所以肯定有适配器MouseAdapter,故只要用内部类继承并复写想要用的方法即可,若是想要查看鼠标事件其具体的动作方法,则应进入鼠标事件对象内查找即可。具体方法请自行查看API。

代码示例:


3、键盘事件KeyListener

AddKeyListener(KeyListenere);添加键盘监听器

KeyAdapter:键盘抽象适配器类

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

keyReleased(KeyEvent e) 释放某个键时调用此方法。

keyTyped(KeyEvent e)   键入某个键时调用此方法。

KeyEvent类中的常用功能

char getKeyChar():返回与此事件中的键关联的字符。

Int getKeyCode():返回与此事件中的键关联的整数 keyCode。

static String getKeyText(int keyCode):返回描述 keyCode 的 String

consume();    屏蔽键

if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)判断组合键

    代码示例:


六、窗口事件Window类

构造函数 

Window(Frame owner) 构造一个新的、最初不可见的窗口,使用指定的 Frame 作为其所有者。

Window(Window owner) 构造一个新的、最初不可见的窗口,使用指定 Window 作为其所有者。

Window(Window owner,GraphicsConfiguration gc) 构造一个新的、最初不可见的窗口,使用指定的所有者 Window 和屏幕设备的 GraphicsConfiguration。

WindowListener类中的常用方法

setVisible(Booleanb);根据参数b的值True显示或False隐藏此组件

setSize(h,s);   设置窗口大小

setLocation(h,s)设置窗口的本地位置

SetBounds(int x ,inty,int with,int height);移动组件并调整其大小

void addWindowListener(WindowListener l)  添加窗体监听器  

按需求覆盖的方法

public void windowActivated(WindowEvent e) 激活窗口时调用。

public void windowOpened(WindowEvent e)  已打开窗口时调用

public void windowClosing(WindowEvent e)  关闭窗口时调用

public void windowIconified(WindowEvent e)  窗口从正常状态变为最小时调用

通过查阅API发现添加窗体监听器的方法为addWindowListener(WindowListener e),而其参数类型WindowListener是一个接口,而WindowListener的子类WindowAdapter已经实现了WindowListener接口,但是其中的方法都是空方法,而且其本身也是抽象的,就是说明WindowAdapter不可以被创建对象,那么我只要继承自Windowadapter覆盖我们需要的方法即可,不用将WindowListener中所有的方法都覆盖。若需要复写的方法不多的时候可以使用匿名内部类。

代码示例:


七、按钮事件Button类

构造函数:

Button()

Button (String label)

常用方法:

Void addActionListener(ActionListener l) 添加指定的动作侦听器,以接收发自此按钮的动作事件。

    通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。需要查看该组件对象的功能。通过查阅API中button的描述。发现按钮支持一个特有监听方法voidaddActionListener(ActionListener  l) ,而且其参数类型ActionListener接口 中只有一个方法voidactionPerformed(ActionEvent e),故只要通过匿名内部类的形式实现ActionListener接口并且复写其中的方法voidactionPerformed(ActionEvent e)即可。

代码示例:


八、对话框Dialog

构造函数

Dialog(Frame owner)构造一个最初不可见的、无模式的 Dialog,它带有指定所有者 Frame 和一个空标题。

Dialog(Frame owner, boolean modal)构造一个最初不可见的 Dialog,它带有指定所有者 Frame、模式和一个空标题。

Dialog(Frame owner,String title)  构造一个最初不可见的、无模式的 Dialog,它带有指定的所有者 Frame 和标题。

Dialog(Dialog owner,String title)构造一个最初不可见的、无模式的 Dialog,它带有指定的所有者 Dialog 和标题。

Dialog(Dialog owner,String title, boolean modal)构造一个最初不可见的 Dialog,它带有指定的所有者 Dialog、标题和模式。

常用方法

Void setVisible(boolean b)根据参数 b 的值显示或隐藏此 Dialog。

Void setTitle(String title) 设置 Dialog 的标题。

Void setModal(boolean modal)指定此 dialog 是否应该是有模式的。

StringgetTitle()获取 dialog 的标题。

九、文件对话框Dialog

FileDialog 类显示一个对话框窗口,用户可以从中选择文件。

构造函数:

FileDialog(Dialog parent)   创建一个文件对话框,用于加载文件。

FileDialog(Dialog parent, String title)  创建一个具有指定标题的文件对话框,用于加载文件。

FileDialog(Dialog parent, String title, int mode)  创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。

FileDialog(Frame parent)  创建一个文件对话框,用于加载文件。

FileDialog(Frame parent, String title)  创建一个具有指定标题的文件对话框窗口,用于加载文件。

FileDialog(Frame parent, String title, int mode)  创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。

其中模式分为:FileDialog.LOAD用于打开文件和FileDialog.SAVE用于保存文件

常用方法:

String getDirectory() 获取此文件对话框的目录。

String getFile()  获取此文件对话框的选定文件。

void setFile(String file) 将此文件对话框窗口的选定文件设置为指定文件。

public void setVisible(boolean b)根据参数 b 的值显示或隐藏此 Dialog

十、文字类Label

构造函数

Label()构造一个空标签。

Label(String text)  使用指定的文本字符串构造一个新的标签,其文本对齐方式为左对齐。

Label(String text, int alignment) 构造一个显示指定的文本字符串的新标签,其文本对齐方式为指定的方式。

常用方法

StringgetText()获取此标签的文本。

Void setText(String text) 将此标签的文本设置为指定的文本。

十一、文本框TextField类

构造函数

TextField()    构造新文本字段。

TextField(int columns)  构造具有指定列数的新空文本字段。

TextField(String text)  构造使用指定文本初始化的新文本字段。

TextField(String text, int columns)  

构造使用要显示的指定文本初始化的新文本字段,宽度足够容纳指定列数。

常用方法

void setText(String t) 将此文本组件显示的文本设置为指定文本。

public String getText()

返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。

十二、文本区Textarea类

构造函数

TextArea()  构造一个将空字符串作为文本的新文本区。

TextArea(int rows,int columns)  构造一个新文本区,该文本区具有指定的行数和列数,并将空字符串作为文本。

TextArea(String text)   构造具有指定文本的新文本区。

TextArea(String text, int rows,int columns)  构造一个新文本区,该文本区具有指定的文本,以及指定的行数和列数。

extArea(String text, int rows,int columns, int scrollbars)  构造一个新文本区,该文本区具有指定的文本,以及指定的行数、列数和滚动条可见性。

常用方法

void append(String str) 将给定文本追加到文本区的当前文本。

Int getColumns()返回此文本区中的列数。

Int getRows() 返回此文本区的行数。

void setColumns(int columns)设置此文本区的列数。

Void setRows(int rows)设置此文本区的行数。

返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。

十三、菜单类

1、菜单栏MenuBar类

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

构造函数:

MenuBar()创建新的菜单栏。

常用方法:

Menuadd(Menu m)  将指定的菜单添加到菜单栏。

MenugetMenu(int i)获取指定的菜单。

Int  getMenuCount()获取该菜单栏上的菜单数。

2、菜单项MenuItem类

构造函数:

MenuItem()  构造具有空标签且没有键盘快捷方式的新菜单项。

MenuItem(String label)  构造具有指定的标签且没有键盘快捷方式的新菜单项。

MenuItem(String label,MenuShortcut s) 创建具有关联的键盘快捷方式的菜单项。

常用方法:

void addActionListener(ActionListener l) 添加指定的动作侦听器,以从此菜单项接收动作事件

3、下拉式菜单Menu类

此类为MenuItem的子类;Menu 对象是从菜单栏部署的下拉式菜单组件。

构造函数:

Menu()构造具有空标签的新菜单。

Menu(String label) 构造具有指定标签的新菜单

Menu(String label,boolean tearOff)

构造具有指定标签的新菜单,指示该菜单是否可以分离。

常用方法:

MenuItem  add(MenuItem mi) 将指定的菜单项添加到此菜单。

MenuItem getItem(int index)获取此菜单的指定索引处的项。

Int getItemCount()获取此菜单中的项数。

十四、Frame类

构造函数

Frame()构造一个最初不可见的Frame 新实例()。

Frame(GraphicsConfiguration gc) 使用指定的 GraphicsConfiguration 构造一个最初不可见的新 Frame。

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

Frame(String title,GraphicsConfiguration gc) 构造一个新的、初始不可见的、具有指定标题和 GraphicsConfiguration 的 Frame 对象。

常用方法

void setMenuBar(MenuBar mb) 将此窗体的菜单栏设置为指定的菜单栏

voidsetTitle(String title)将此窗体的标题设置为指定的字符串。

StringgetTitle()获得窗体的标题。

十五、练习

1、创建一个带有按钮的窗口,通过窗口上的符号×和按钮关闭窗口。

代码示例:




运行结果为:


通过窗口符号×关闭时:


通过按钮关闭窗口时:


2、创建一个带有按钮和文本框的窗口,能够识别键盘和鼠标的操作,并能关闭窗口。

代码示例:







3、创建一个带有菜单栏和子菜单的窗口。

代码示例:




4、创建一个带有打开,保存,退出功能菜单栏的窗口,功能可以选择一个文件打开,打开的不是文件是会显示错误,将打开的文件显示在文本区域中,并且可以对文件内容进行更改。

代码示例:






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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3289次
    • 积分:234
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档
    最新评论