第五小节之GUI(图形用户界面)

GUi:全程是Graphical User Interface,即图形用户界面,就是应用程序提供给用户操做的图形界面,包括窗口、菜单、按钮、工具栏和其它各类图形界面元素。提供了丰富的类,这些类分别位于java.awt和javax.swing包中,简称AWT和Swingjava

AWT:用于建立图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件。分为两大类:component和MenuComponent。其中MenuComponent是全部与菜单相关的组件的父类,Component则是除菜单外其余AWT组件的父类,他表示一个能以图形化方式显示出来,并可与用户交互的对象。算法

Component类一般称为组件,根据Component的不一样做用,可将其分为基本组件类和容器类。Component类的一个子类Container,表示为一个容器,它是一个特殊的组件,能够用来容纳其余组件。框架

显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素的多少。ide

图像分辨率则是单位英寸中所包含的像素点数,其定义趋近于分辨率自己的定义。函数

矢量图是由计算机的算法产生的,能够无限的放大或缩小,不会有任何损失,一般有矢量软件制做工具

位图是由一个一个的小色块组成,放大后会看见那些小色块,同一面积内小色块越多分辨率就越高布局

GBK:三原色0~255 254种灰度级学习

分辨率:主要是指显示器所能显示的像素的多少,能够从显示分辨率与图像分辨率两个方向分类字体

一、window类是不依赖其余容器而独立存在,它有两个子类,分别是Frame类和Dialog类。Frame类用于建立一个具备标题栏的框架窗口,做为程序的主界面。Dialog类用于建立一个对话框,实现与用户的信息交互。this

二、Panel面板 Panel也是一个容器,可是它不能单独存在,只能存在其余容器,一个Panel对象表明了一个长方形的区域,在这个区域中能够容纳其余组件。在程序中一般会使用Panel来实现一些特殊的布局。

AWT事件处理

  事件处理机制专门相应用户的操做,好比,想要用户的点击鼠标,按下键盘灯操做,就须要使用ATW的事件处理机制。

    事件对象:封装了GUI组件上发生的特定事件(一般就是用户的一次操做)。

    事件源(组件):事件发生的场所,一般就是产生事件的组件。

    监听器(Listener):负责监听事件源上发生的事件,并对各类事件做出相应的处理的对象(对象中包含事件处理器)

    事件处理器:监听器对象对接收的事件对象进行相应处理的方法。

事件源是一个组件,当用户进行一些操做时,如按下鼠标或释放键盘等,这些动做会触发相应的事件。若是事件源注册了事件监听器,则触发的相应事件将会被处理。

在程序中,若是想实现事件的监听机制,首相须要定义一个类事件事件监听器的接口。例如:Window类型的窗口须要实现WindowListener。接着经过addWinListener()方法为事件源注册事件监听器对象,当事件源上发生事件时,便会触发事件监听器对象,由事件监听器调用相应的方法来处理相应的事件。

事件适配器:JDk提供了一些适配器类,它们是监听器接口的默认实现类,这些实现类中实现了接口的全部方法,但方法中没有任何代码。程序能够经过继承适配器类来达到实现监听器接口的目的。几乎全部的监听器接口都有对应的适配器类,同过继承适配器类来实现监听器接口时,须要处理哪一种事件,直接重写该事件对应的方法便可。

 1 package event;
 2 
 3 import java.awt.BorderLayout;
 4 import java.awt.Container;
 5 import java.awt.event.KeyEvent;
 6 import java.awt.event.KeyListener;
 7 import java.awt.event.MouseEvent;
 8 import java.awt.event.MouseListener;
 9 import java.awt.event.MouseMotionListener;
10 import java.awt.event.WindowAdapter;
11 import java.awt.event.WindowEvent;
12 import java.awt.event.WindowListener;
13 
14 import javax.swing.JFrame;
15 import javax.swing.JLabel;
16 import javax.swing.JTextArea;
17 
18 public class WindowAdapterFrame extends JFrame {
19     // 1. 属性
20 
21     // 2. 方法
22     public WindowAdapterFrame() {
23         this.setTitle("窗口适配器");
24         setSize(600, 400);
25         setResizable(false);
26         setLocationRelativeTo(null);
27         //setDefaultCloseOperation(EXIT_ON_CLOSE);
28         
29         WindowListener listener = new WindowAdapter() {
30             @Override
31             public void windowClosing(WindowEvent arg0) {
32                 dispose();
33             }
34         };
35         
36         this.addWindowListener(listener);
37     }
38 
39     public static void main(String[] args) {
40         JFrame frame = new WindowAdapterFrame();
41         frame.setVisible(true);
42     }
43 }

经常使用事件分类:窗体事件、鼠标事件、键盘事件、动做事件

布局管理器:组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。在Java.awt包中提供了五中布局管理器,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、BorderLayout(边界布局管理器)、GirdLayout(卡片布局管理器)。每一个容器在建立时都会使用一种默认的布局管理器,在程序中能够经过容器对象的setLayout()方法设置布局管理器,经过布局管理器来自动进行组件的布局管理。例如把一个Frame窗体的布局管理器设置为FlowLayout,代码以下:

1 Frame frame=new Frame();
2 frame.setLayout(new FlowLayout);

  FlowLayout:容器会将组件按照添加顺序从左向右放置、从上到下,当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件能够左对齐,居中对齐(默认方式)、或右对齐的方式排列

  FlowLayout的构造方法:

    FlowLayout()组件默认居中对齐,水平、垂直间距默认为5个单位

    FlowLayout(int align)指定组件相对于容器的对齐方式,水平、垂直间距默认为5个单位

    FlowLayout(int align,int hgap,int vgap)指定组件的对齐方式和水平、垂直间距

其中参数align决定组件在每行中相对于容器边界的对齐方式,可使用该类中提供的常量做为参数传递给构造方法,其中FlowLayout.LEFT用于表示左对齐、FlowLayout.RIGHT用于表示右对齐、FlowLayout.CENTER用于表示居中对齐。参数hgap和参数vgap分别设定组件之间的水平和垂直间隙,能够填入一个任意的数值

BorderLayout(边界布局管理器)它将容器划分为5个区域,分别是东(EAST)、南(SOUTH)、西(NORTH)、中(CENTER)。组件能够被放置在这五个区域的中任意一个。当向BorderLayout布局管理器的容器中添加组件时,须要使用add(Component comp,Object constraints)方法,其中参数constraints是Object类型,在传参时可使用BorderLayout类提供的5个常量,它们分别是EAST、SOUTH、WEST和CENTER。若是不指定添加到哪一个区域,则默认添加到CENTER区域,而且每一个区域只能放置一个组件,若是向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。

GridLayout(网格布局管理器)使用纵横线将容器分红n行m列大小相等的网格,每一个网格中放置一个组件。添加到容器中的组件首先放置在第一行第一列(左上角)的网格中,而后在第一行的网格中从左向右依次放置其余组件,行满后,继续在下一行中从左向右放置组价。与FlowLayout不一样的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。

  GridLayout构造方法:

    GridLayout()默认只有一行,每一个组件占一列

    GridLayout(int rows,int cols)指定容器的行数和列数

    GridLayout(int rows,int cols,int hgap,int vgap)指定容器的行数和列数以及组件之间的水平、垂直间距

 特色:组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变,组件始终占据网格的整个区域。缺点是老是忽略组件的最佳大小,全部组件的宽高都相同。

GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管理器相似,不一样的是,它容许网格中的组件大小各不相同,并且容许一个组件跨越一个或多个网格

CardLayout(卡片布局管理器)卡片布局管理器将界面看做一些列卡片,在任什么时候候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。

不使用布局管理器:当一个容器被建立后,它们都会有一个默认的布局管理器。window、Frame和Dialog的默认布局管理器是BorderLayout,Panel的默认布局管理器是FlowLayout。若是不但愿经过布局管理器来对容器进行布局,也能够调用容器的setLayout(null)方法,将布局管理器取消。在这种状况下,程序必须调用容器中每一个组件的setSize()和setLocationO方法或者是setBounds()方法(这个方法接收四个参数;分别是左上角的x、y坐标和组件的长、宽)来为这些组件在容器中定位。

AWT绘图:在java.awt包中专门提供了一个Craphis 是它至关于一个抽象的画笔,其中提供了各类经制图形的方法,使用Graphics类的方法就能够完成在组件上绘制图形。

  Graphics经常使用方法

  void setColor(Color c)将此图形上下文的颜色设置为指定颜色

  void setFont(Font f)将此图形上下文的字体设置为指定字体

  void drawLine(int xl,int yl.int x2,int y2)以(x1,y1)和(x2,y2)为端点绘制一条线段

  void drawRet(int x.int y.inwidth, int height)绘制指定矩形的边框矩形的左边缘和右边缘分别位于x和x+width,上边缘和下边缘分别位于y和y+ height

void drawOval(int x, int y, intwidth, int height)绘制椭圆的边框。获得一个圆或椭圆,它恰好能放人由x.y.width和height参数指定的矩形中。椭圆覆盖区域的宽度为width+1像素,高度为height+1像素

void fillRect ( int x, int y, intwidth, int height)用当前颜色填充指定的矩形。该矩形左边缘和右边缘分别位于x和x+:width-1,上边缘和下边缘分别位于y和y+ height- 1

void fillOval ( int x, int y, intwidth, int height)用当前颜色填充外接指定矩形框的椭圆

void drawString ( String str, intx,int y)使用此图形上下文的当前字体和颜色绘制指定的文本str.最左侧字符左下角位于(x,y)坐标

注意:在组件第一次显示时,AWT线程都会自动去调用组性的paint(Graphics g方法,为该方法传人一个Graphics类型的对象用于绘制图形,所以,要想在组件中绘制图形,就须要重写它的paint()方法。

Swing

相对于AWT来讲,Swing包中提供了更加丰富、便捷、强大的GUI组件,并且这些组件都是Java语言编写而成的,所以,Swing组件不依赖于本地平台,能够真正作到跨平台运行。一般来说,咱们把依赖于本地平台的AWT组件称大重级组件,而把不依赖本地平台的Swing组件称为轻量级组件。学习Swing组件的过程和学习AWT差很少,大部分的Swing组件都是JComponent类的直接或者间接子类,而JComponent类是AWT中java. awt. Container 的子类,说明Swing组件和AWT组件在继承树上造成了必定的关系

JFrame:

在swing组件中,常见的一个就是JFrame,它和Frame同样是一个独立存在的顶级窗口,不能放置在其余容器之中。JFrame 类和Frame类最大的区别JFrame类是提供了关闭窗口的功能,在程序中不须要添加窗体监听器,只需调用stDefaultCloseOperation()方法,而后将常量JFrame.EIXT_ON_CLOSE 做为参数传人便可,该参数表示点击窗口关闭我和时退出程序。

JDialog:

JDialog是Swing的另一个真级窗口,它和Dialog同样都表示对话框。JDialog 对话框可分为两种:模态对话框和非模态对话框。所谓模态对话框是指用户须要等处处理完对话框后过能继续与其余窗口交万而非模态对话框容许用户在处理对话框的同时与其余窗口交互。对话框是模态或者非模态,能够在建立Dialog 对象时为构造方法传人参数来设置,也能够在建立JDialog对象后调用它的setModal()方法米进行设置

  JDialog 构造方法

    JDialog( Frame owner)功能描述,构造方法,用来建立一个非模态的对话框,owner为对话框全部者(顶级窗口JFrame)

    JDialog(Frame owner, String title)  构造方法建立一个具备指定标题的非模态对话框
    JDialog( Frame owner, boolean modal)建立个有指定模式的无标题对话框

注意:

列举了JDialog三个经常使用的构造方法,在这三个构造方法中都须要接收一个Frame类型的对象,表示对话框全部者,若是该对话框没有全部者,参数owner能够传人null,第三个构造方法中,参数modal用来指定JDialog窗口是模态仍是非模态,若是modal值设置为true, 对话框就是模态对话框,反之则是非模态对话框,若是不设置modal的值,其默认值为false,也就是非模态对话框。

中间容器:

 Swing组件中不只具备JFrame和JDialog这样的顶级窗口,还提供了一些中间容器,这些容器不能单独存在只能放置在顶级窗口中。其中最多见的中间容器有两种:JPanel和JScrollPane,接下来分别来介绍这两种容器。

①JPanel: JPanel和AWT中的Panel组件使用方法基本一致,它是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。固然也可使用JPanel带参数的构造函数JPanel( LayoutManager layout)或者它的setLayout()方法为其制定布局管理器。
②JscrollPane:与JPanel不一样的是,JScrolPane是- -个带有滚动条的面板容器,并且这个面板兵能添加一个组件,若是想往JScrollPane面板中添加多个组件,应该先将组件添加到JPanel中,而后将JPanel添加到JScrollPane中。

  构造方法:    

JScrollPane( )建立一个空的JScrllPane面板
JScrollPane(Component view)建立个显示指定组件的JScolPane面板,只要组件的内容超过视图大小就会显示水平和垂直滚动条

JScrollPane ( Component view,int vsbPolicy,int hsbPolicy)建立一个显示指定容器、并具备指定滚动条策略的JSrollPane.参数vsbPolicy和hsbPolicy分别表示垂直滚动条策略和水平滚动条策略,应指定为ScrollPaneConstants的静态常量,

以下所示:

 HORIZONTAL SCROLLBAR AS_ NEEDED:表示水平滚动条只在须要时显示,是默认策略。

HORIZONTAL SCROLLBAR NEVER:表示水平滚动条永远不显示

    HORIZONTAL SCROLLBAR ALWAYS:表示水平滚动条一直显示

文本组件: 

  一、JTextField:称为文本框,它只能接收单行文本的输入

    构造方法:

      JTextField()建立个空的文本框 ,初始字 符串为null

      JTextFiled(int columns)建立一个具备指定列数的文本框,初始字符串为null

      JTextField( String text)建立一个显示指定初始字符串的文本框

      JTextField String text , int column)建立一个具备指定列数并显示指定初始字符串的文本框

    JTextField 有一个子类JPaswordText,它表示一密码框,只能接收用户的单行输人,可是在此框中不显示用户输人的真实信息,而是经过显示指定的回显字符做为占位符。新建立的密码框默认的回显字符为*。JPasswordText和JTextField的构造方法类似。

  二、JTextArea: JTextArea称为文本域,它能接收多行文本的输人,使用JTextArea构造方法建立对象时能够设定区域的行数

    构造方法:    

TextArea()功能说明建立一个空的文本域
JTextArea(String text)建立显示指定初始字符串的文本域
JTextArea(int rows,int columns)建立具备指定行和列的空的文本域

JTextArea(String text,int rows, int columns)建立显示指定初始文本并指定了行列的文本域

   三、菜单组件:在GUI程序中,菜单是很常见的组件,利用Swing提供的菜单组件能够建立出多种样式的菜单。

         在GUI程序中,建立下拉式菜单须要使用三个组件: MenuBar(菜单栏)、JMenu(菜单)和JMenultem(菜单项),
 ①JMenuBar. JMenuBar表示一个水平 的菜单栏,它用来管理菜单,不参与同用户的交互式操做。菜单栏能够放在容器的任何位置但一般状况下会使用顶级窗口(如JFrame JDialog)的setJMenuBar(JMenuBar menuBar) 方法将它放置在顶级窗口的顶部。JMenuBar有一个无参构造函数,建立菜单栏时,只须要使用new关键字建立JMenubar对象便可。建立完菜单栏对象后,能够调用它的add(JMenuc)方法为其添加JMenu菜单。

②JMenu。JMenu表示一个菜单,它用来整合管理菜单项。菜单能够是单-层次的结构,也能够是多层次的结构。大多状况下.使用JMenu(String text)构造丽数建立JMenu菜单,参数text表示菜单上的文本。

  经常使用方法:

woid JMenultem add(JMenultem menuItem)将菜单项添加到菜单末尾,返回此菜单项
void addSeparator( )分隔符添加到菜单的末尾

JMenultem getItem(int pos)返回指定索引处的菜单项,第一:个菜单项的索引为0
int getItemCount()返回菜单上的项数,菜单项和分隔符都计算在内

void JMenultem insert(JMenultem menuItem,int pos)在指定索引处插人菜单项

void insertSeparator(int pos)在指定索引处雨人分隔符

void remove(int pos)从菜单中移除指定索引处的菜单项
void remove(JMenultem menutem)从菜单中移除指定的菜单项

void removeAll()从菜单中移除全部的菜单项

③JMenultem。JMenultem 表示一个菜单项,它是菜单系统中最基本的组件。和JMenu菜单同样,在建立JMenultem菜单项时,一般会使用JMenumItem( String text)这个构造方法为菜单项指定文本内容。

  JMenultem继承自AbstractButton类的,所以能够把它当作是一个按钮,若是使用无参的构造方法建立了一个菜单项,则能够调用从AbstractButton类中继承的setText(String text)方法和setIcon( )方法为其设置文本和图标。

弹出式菜单:

  对于弹出式菜单,相信你们也不会陌生,在Windows桌面点击鼠标右键会出现一个菜单,那就是弹出式菜单。在Java的Swing组件中.弹出式菜单用PopupMenu表示

    PopupMenu弹出式菜单和下拉式菜单-样都经过调用addO)方法添加JMenultem菜单项,但它默认是不可见的,若是想要显示出来,则必须调用它的show (Component

    invoker,int x.int y)方法该方法中参数invoker表示JPopupMenu菜单显示位置的参考疑物组件,x和y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。
相关文章
相关标签/搜索