GUI图形界面

本文详细介绍了Java中的GUI(图形用户接口),包括GUI和CLI的区别、常用的组件如Awt和Swing,以及如何创建和操作组件。文章还讨论了布局管理器、事件监听机制,并给出了创建简单窗体的步骤,最后提到了菜单栏和不同类型的监听器在图形界面中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GUI(图形用户界面)

概述

l GUI

•    Graphical User Interface(图形用户接口)。

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

l CLI

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

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

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

l 举例: 

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

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

AwtSwing

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

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

类 Component component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。

内部封装各种注册监听器的方法其子类通用常用的有 addKeyListener, addMouseListener,

常用方法

void add(PopupMenupopup)

          向组件添加指定的弹出菜单。

void setSize(int width, int height)

         调整组件的大小,使其宽度为 width,高度为 height。

void setVisible(boolean b)

         根据参数 b 的值显示或隐藏此组件。

void setBounds(int x,int y, int width, int height)

         移动组件并调整其大小。

void setName(String name)

         将组件的名称设置为指定的字符串。

void setLocation(int x, int y)

         将组件移到新位置。

void setLocale(Locale l)

         设置组件的语言环境。

void setFont(Font f)

         设置组件的字体。

void remove(MenuComponent popup)

         从组件移除指定的弹出菜单。

 

int getWidth()

         返回组件的当前宽度。

int getX()

         返回组件原点的当前 x 坐标。

int getY()

         返回组件原点的当前 y 坐标。

String getName()

         获取组件的名称


类 Container 容器对象是一个可包含其他 AWT 组件的组件。

添加到容器中的组件放在一个列表中。列表的顺序将定义组件在容器内的正向堆栈顺序。如果将组件添加到容器中时未指定索引,则该索引将被添加到列表尾部(此后它位于堆栈顺序的底部)。

常用方法

Componentadd(Component comp)   可添加任何组件

         将指定组件追加到此容器的尾部。

Componentadd(Component comp, intindex)   将指定组件添加到此容器的给定位置上。

Component add(String name, Component comp)    将指定组件添加到此容器中。


LayoutManager getLayout()

         获取此容器的布局管理器。

Dimension getMaximumSize()

         返回此容器的最大大小。

 Dimension getMinimumSize()

         返回此容器的最小大小。

void remove(Component comp)

         从此容器中移除指定组件。

 

 void remove(int index)

    从此容器中移除 index 指定的组件。

 void removeAll()

         从此容器中移除所有组件。

void setFont(Font f)

         设置此容器的字体。

 void setLayout(LayoutManagermgr)

         设置此容器的布局管理器。

类 Window 

Window 对象是一个没有边界和菜单栏顶层窗口窗口的默认布局是 BorderLayout

构造方法

Window(Frame owner)

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

Window(Window owner)

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

常用方法

Toolkit getToolkit()          返回此窗体的工具包。

boolean isActive()            返回此窗口是否为活动窗口。

void setSize(int width, int height)

         调整组件的大小,使其宽度为 width,高度为 height。

void setVisible(boolean b)

         根据参数 b 的值显示或隐藏此 Window。

void setBounds(int x, int y, int width, int height)

         移动组件并调整其大小。

void addWindowListener(WindowListener l)

          添加指定的窗口侦听器,以从此窗口接收窗口事件。

类 Frame (继承Window) Frame带有标题和边框顶层窗体

窗体的默认布局为 BorderLayout。

构造方法

Frame(String title)

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

Frame()

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

常用方法

int getExtendedState()         获取此窗体的状态。

MenuBar getMenuBar()         获取此窗体的菜单栏。

String getTitle()         获得窗体的标题。

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

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

void setVisible(boolean b)

          根据参数 b的值显示或隐藏此 Window

void setBounds(int x, inty, int width, int height)      移动组件并调整其大小。 x y指定左上角的新位置,由 width height指定新的大小。

void setLayout(LayoutManager mgr)

          设置此容器的布局管理器。

事例

Frame f = new Frame("窗体");//创建Frame窗体并指定标题

        f.setSize(500,400);//设置窗体大小横,纵

        f.setLocation(500,100);//设置窗体左上角巨屏幕左上角的距离

        f.setLayout(new FlowLayout());//设置窗体的布局方式

        Button b = new Button("这是一个按钮");//创建按钮

        f.add(b);//将按钮以流式布局添加到窗体

        //f.setTitle("自定义标题");

        //添加指定的窗口侦听器,以从此窗口接收窗口事件。

        f.addWindowListener(new mywin());

        f.setVisible(true);//设置窗体可见

 

类 Dialog  (继承Window)  对话框

Dialog 是一个带标题和边界的顶层窗口     Dialog的默认布局为 BorderLayout。

构造方法

Dialog(Frame owner)

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

Dialog(Frame owner, boolean modal) 模式true对话框结束才可操作窗体False未结束

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

Dialog(Frameowner, String title)

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

Dialog(Frame owner, String title, booleanmodal)

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

常用方法

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

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

String getTitle()             获取 dialog 的标题。

Component add(Component comp)   可添加任何组件  (常添加Lable  Button)

         将指定组件追加到此容器的尾部。

 

FileDialog FileDialog类显示一个对话框窗口,用户可以从中选择文件。打开保存按钮

字段

static int LOAD   此常量值指示文件对话框窗口的作用是查找要读取的文件。打开

static int SAVE   此常量值指示文件对话框窗口的作用是查找要写入的文件。保存

构造方法

FileDialog(Frame parent, String title)

         创建一个具有指定标题的文件对话框窗口,用于加载文件。 默认打开

FileDialog(Frame parent, String title, intmode)  mode为LOAD或SAVE

         创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。

常用方法

String getDirectory()

         获取此文件对话框的目录。

 String getFile()

         获取此文件对话框的选定文件。

类Label  (extends Component)

Label 对象是一个可在容器中放置文本的组件。一个标签只显示一行只读文本。文本可由应用程序更改,但是用户不能直接对其进行编辑。  Lale组件一般添加到Dialog中

字段

static int CENTER           指示标签文本应居中。

static int LEFT           指示标签文本应左对齐。

static int RIGHT           指示标签文本应右对齐。

构造方法

Label(String text)

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

Label(String text, int alignment)

         构造一个显示指定的文本字符串的新标签,其文本对齐方式为指定的方式。

常用方法

String getText()           获取此标签的文本。

int getAlignment()           获取此标签的当前对齐方式。

void setAlignment(int alignment)           将此标签的对齐方式设置为指定的方式。

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

类 Panel

Panel 是最简单的容器类。应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板。

面板的默认布局管理器是 FlowLayout 布局管理器。

构造方法

Panel()

         使用默认的布局管理器创建新面板。

Panel(LayoutManager layout)

         创建具有指定布局管理器的新面板。

常用方法

void addNotify()           创建 Panel 的同位体。


布局管理器

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

l  常见的布局管理器:

•    FlowLayout(流式布局管理器)

•   从左到右的顺序排列。  

•   Panel默认的布局管理器。

•    BorderLayout(边界布局管理器)

•   东,南,西,北,中

•   Frame默认的布局管理器。

•    GridLayout(网格布局管理器)

•   规则的矩阵

•    CardLayout(卡片布局管理器)

•   选项卡

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

•   非规则的矩阵

 

 

建立一个简单的窗体

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

l Window常用子类:Frame  Dialog

l 简单的窗体创建过程:

•    Frame  f= new Frame(“my window”);

•    f.setLayout(new FlowLayout());

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

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

•    f.setVisible(true);


事件监听机制组成

事件监听机制的特点:

事件源(组件)

事件(Event)

监听器(Listener)

事件处理(引发事件后处理方式)

事件监听机制

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

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

该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象(监听器的适配器) 一般用匿名内部类来表示。。

在覆盖方法的时候,方法的参数一般是XXXEvent(所监听的事件类型)类型的变量接收。

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

创建图形化界面

1,创建Frame窗体

2,对窗体进行基本设置

    比如大小,布局,位置,标题

3,定义组件

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

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

 

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

 

事件:每一个事件源都有自己特有的对应事件和共性事件。XXXEvent(所监听的事件类型)

 

监听器:将可以触发某一事件的动作(不只一个动作)都已经封装到了监听器中XXXListener

XXXListener的子类 (监听器的适配器) XXXAdapter

菜单栏

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

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

void remove(int index)      从此菜单栏移除指定索引处的菜单。

 

类 Menu (extends MenuItem)菜单Menu对象是从菜单栏部署的下拉式菜单组件。

可引出下级菜单或菜单项

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

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

void addSeparator()   将一个分隔线添加到菜单的当前位置。

void insert(MenuItem menuitem, int index) 将菜单项插入到此菜单的指定位置。

void removeAll()  从此菜单移除所有项。

 

类 MenuItem  加标签的菜单项 

菜单中的所有项必须属于类 MenuItem 或其子类之一。

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

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

String getLabel()        获取此菜单项的标签。

void setLabel(String label)        将此菜单项的标签设置为指定标签。

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

MenuShortcut getShortcut()         获取与此菜单项关联的 MenuShortcut 对象。

void setShortcut(MenuShortcuts)  设置与此菜单项关联的 快捷命令方式

MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);快捷命令Ctrl+A  默认

MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, true);快捷命令Ctrl+Shift+A

MenuShortcut(int key)    默认false 快捷命令Ctrl+(key)

MenuShortcut(int key, boolean useShiftModifier) true快捷命令Ctrl+ Shift+(key)

int getKey()

          返回此菜单快捷方式的原键代码。

String toString()

          返回此菜单快捷方式的国际化描述。

 booleanusesShiftModifier()

          返回是否此菜单快捷方式必须使用 SHIFT 键调用。

 

类 TextAreaextends TextComponent extends Component

TextArea 对象是显示文本的多行区域。可以将它设置为允许编辑或只读。

字段

static int SCROLLBARS_BOTH                 创建并显示垂直和水平滚动条。

static int SCROLLBARS_HORIZONTAL_ONLY       只创建并显示水平滚动条。

static int SCROLLBARS_NONE                 不为文本区创建或显示任何滚动条。

static int SCROLLBARS_VERTICAL_ONLY          只创建并显示垂直滚动条。

构造方法

TextArea(int rows, int columns)

         构造一个新文本区,该文本区具有指定的行数和列数,并将空字符串作为文本。垂直滚动条和水平滚动条对于文本区都将是可视的。默认SCROLLBARS_BOTH

TextArea(String text)

         构造具有指定文本的新文本区。  默认SCROLLBARS_BOTH

TextArea(String text, int rows, int columns)

      构造一个新文本区,该文本区具有指定的文本,以及指定的行数列数。 滚动条可见

TextArea(String text, int rows, int columns, int scrollbars)

         构造一个新文本区,该文本区具有指定的文本,以及指定的行数、列数和滚动条可见性。int scrollbars 确定滚动条可见性

常用方法

void addTextListener(TextListener l)     继承父类监听器

         添加指定的文本事件侦听器,以接收此文本组件发出的文本事件。

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

void insert(String str, int pos)       在此文本区的指定位置插入指定文本。

publicString getText()         返回此文本组件表示的文本。

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

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

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

publicvoid setText(String t)  

将此文本组件显示的文本设置为指定文本。一般用于清空文本区域

public void setEditable(boolean b)设置此文本组件是否可编辑。true,可编辑的

类 TextFieldextends TextComponent extends Component

TextField 对象是允许编辑单行文本的文本组件。

每次用户在文本字段中键入一个键时,就有一个或更多键事件被发送到该文本字段。KeyEvent 是以下三种类型之一:keyPressed、keyReleased 或 keyTyped。

构造方法

TextField()           构造新文本字段。

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

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

TextField(String text, int columns)     构造使用要显示的指定文本以及指定列数。

常用方法     没有append()方法

void addActionListener(ActionListener l)

         添加指定的操作侦听器,以从此文本字段接收操作事件。

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

publicString getText()              返回此文本组件表示的文本。

void setColumns(int columns)           设置此文本字段中的列数。

int getColumns()           获取此文本字段中的列数。

限制文本框中只能输入数字

//给文本框添加 键盘监听   定义文本框中只能输入数字

        tf.addKeyListener(newKeyAdapter(){

            publicvoid keyPressed(KeyEvent e)

            {

                intcode = e.getKeyCode();

                if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9))

                {

    System.out.println(KeyEvent.getKeyText(code)+"*****输入非法!");

                    e.consume();//取消事件

                }

            }

        });

类 Button  (extends Component

此类创建一个标签按钮。当按下该按钮时,应用程序能执行某项动作。

构造方法

Button(String label)           构造一个带指定标签的按钮。

常用方法

void addActionListener(ActionListener l)

         添加指定的动作侦听器,以接收发自此按钮的动作事件。

String getLabel()

         获取此按钮的标签。

void setLabel(String label)

         将按钮的标签设置为指定的字符串。

 

图形界面 布局: Frame窗体 添加组件 菜单栏MenuBar( 菜单项MenuItem 菜单Menu)

                         添加组件 按钮  Button

                         添加组件 文本框TextField TextArea

 

监听器:将可以触发某一事件的动作(不只一个动作)都已经封装到了监听器中XXXListener

XXXListener的子类 (监听器的适配器) XXXAdapter

监听器 为各个组件注册相关监听器(添加相应的功能)

监听器的构造函数都是默认构造函数 无形参

监听器 是接口 继承java.awt.event   监听器内方法接收的是相应的事件

接口 ActionListener addActionListener(new ActionListener(){});

只有一个方法  所以不需要适配器

void actionPerformed(ActionEvente)        发生操作时调用。

ActionListener 主要监听菜单项MenuItem按钮Button文本框TextField

ActionEvent注:要使用键盘在 Button上触发 ActionEvent,请使用空格键。//空格键会调用按钮活动监听器实现 ActionListener 接口的对象在发生事件时获取此 ActionEvent。因此,侦听器不必处理个别鼠标移动和鼠标单击的细节,而是可以处理像“按下按钮”这样的“有意义”(语义)事件。

 

 

接口 TextListener    只有一个方法  所以不需要适配器

void textValueChanged(TextEvente)         文本的值已改变时调用。

TextListener主要监听文本框 TextComponent及其子类TextArea, TextField

接口 WindowListener     addWindowListener(new WindowAdapter(){});

用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。内部封装方法过多需要适配器 一般使用到匿名内部类

WindowAdapter是WindowListener的适配器

适配器的出现 方便创建所需指定功能的对象

监听器WindowListener是接口 若创建其对象需要覆盖其中的所有抽象方法

而WindowListener的适配器WindowAdapter抽象类 实现了接口的所有抽象方法 实现形式为空方法体      可通过继承WindowAdapter 覆盖所需要的方法   来创建对象

void windowClosed(WindowEvente)      关闭窗口时调用。

void windowDeiconified(WindowEvente)       窗口从最小化状态变为正常状态时调用。

void windowIconified(WindowEvente)        窗口从正常状态变为最小化状态时调用。

WindowAdapter 主要监听窗口window及其子类 Frame  dialog


接口 MouseListener    addMouseListener(new MouseAdapter(){});

用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。)

MouseAdapter适配器

void mouseClicked(MouseEvente)      鼠标按键在组件上单击(按下并释放)时调用。

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

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

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

void mouseWheelMoved(MouseWheelEvent e)   鼠标滚轮旋转时调用。

MouseEvent

int getClickCount()       返回与此事件关联的鼠标单击次数

int getX()           返回事件相对于源组件的水平 x 坐标。

int getY()           返回事件相对于源组件的垂直 y 坐标。

MouseAdapter监听对象 Component及其子类

接口 KeyListener   addKeyListener(new KeyAdapter(){});

用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 KeyAdapter 类(仅重写有用的方法)。

KeyAdapter 适配器

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

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

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

KeyAdapter监听对象 Component及其子类

KeyEvent 主要方法有

char getKeyChar()

          返回与此事件中的键关联的字符。

int getKeyCode()

          返回与此事件中的键关联的整数 keyCode。

static String getKeyText(intkeyCode)

          返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。

从InputEvent继承的方法

boolean isControlDown()           返回 Control 修饰符在此事件上是为 down。

boolean isShiftDown()           返回 Shift 修饰符在此事件上是否为 down。

boolean isAltDown()           返回 Alt 修饰符在此事件上是否为 down。

e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER  组合键ctrl+enter

 

先布局好图形界面

Frame 添加 Button按钮 TextFile文本框 TextArea文本区域 MenuBar菜单栏

MenuBar菜单栏 添加 Menu菜单 或 MenuItem菜单项

Menu菜单 添加 MenuItem菜单项  

菜单项 能够关联 快捷命令 能够注册监听器

Dialog对话框 需要申明相关的Frame窗体 设定模式true 默认模式false

FlowLayout布局组件代码添加顺序就是图形的显示顺序  一个菜单项只有一个图形显示 当第二次添加同一个菜单项的时候  之前添加此菜单项的语句被覆盖 或者说 失效

 

然后注册监听器 实现功能组件    监听器是接口(需要覆盖所有方法)其适配器是抽象类(以空方法的形式覆盖了接口的所有抽象方法所以需要什么覆盖什么即可)

组件对象.addXXXListener(相应监听器对象或其适配器对象newXXXListener或者new XXXAdapter()

{ public方法(相应的事件xxxEvent e)

{

内容(可能运用到xxxEvent中的相关内容)

}

})

 

 

实例

通过按钮关闭窗体。

    /*为按钮添加退出程序的功能

    按钮就是事件源

    那么选择哪个监听器呢?

    通过关闭窗体示例了解到,想要知道哪个组件具备什么样的监听器

    需要查看该组件对象的功能

    查阅button的描述,发现按钮支持一个特有的活动监听addActiveListener

*/          b= new Button("功能按钮");

<span style="white-space:pre">	</span>    b.addActionListener(new ActionListener(){
            publicvoid actionPerformed(ActionEvent e)
            {
                System.out.println("通过按钮实现窗体关闭");
                System.exit(0);
            }

菜单栏练习

菜单栏  文件的打开保存  打开文件 显示内容 修改文件内容 保存修改后的内容

简单的记事本小代码

点击打开链接

========================================================

图形化界面是由单独线程完成的  开启图形化界面就会开启一个线程

创建图形化界面:

1,创建Frame窗体

2,对窗体进行基本设置

    比如大小,布局,位置,标题

3,定义组件

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

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值