- 图形用户界面(GUI)使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便的发送指令,并将运行结果以图形方式显示得给用户。
- 抽象窗口工具包(AWT)(重要级,依赖于平台):容器类,UI组件类,帮助类。
- JDK1.2以后,引入javax.swing(轻量级),是AWT的子类。
Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。
- 组件不能独立的显示出来,必须将组件放在一定的容器中才可以显示出来。
- 在componen类中定义了AWT组件具有的一般功能如大小和位置控制,外形控制,组件的状态控制等。
- AWT支持的组件:按钮、标签、文本框、文本区、复选框、单选按钮、滚动条。复选按钮、表格、菜单等。
容器:
- 容器(container)实际上是component的子类,因此容器本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能,通过容器来组织其它界面成分和元素。
- 容器类具有的功能是组件管理和布局管理。在组件管理中,包含的方法有add()、remove()、getComponent()等,分别用于添加组件、删除组件和获得某个组件。
- container类可以直接或间接派生出两个常用容器:框架(Frame类)和面板(panel类)。
帮助类:
- graphics类:是所有用来在组件上进行图形绘制时所使用的图形环境上下文的父类。
- 布局管理类(layoutmanager):为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。为容器设置布局管理类时,可调用容器类中的setlayout()方法。
- color类和font类
容器类组件
-
容器分为顶层容器和非顶层容器。
-
顶层容器可以独立的窗口,不需要其他组件支持。顶层容器的类是Windows,其重要子类是frame(框架)和dialog(对话框)
-
非顶层容器不是独立的窗口,必须位于窗口之内,非顶层容器包括panel及scrollpanel等,panel的重要子类是applet类。
-
container类的特点是:容器类可以容纳其它组件,加入容器中后,组件的位置由布局管理器决定。
package com.imau.gui;
-
导入包
-
创建组件对象
-
初始化
import java.awt.*; import javax.swing.*; public class FrameDemo extends JFrame { public FrameDemo(){
1.设置标题 图标 大小 位置 可见性 窗口的事件
this.setTitle("这是一个窗口");
this.setSize(300,300);
this.setLocation(400,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package com.imau.gui; public class Text {
public static void main(String[] args){
new FrameDemo();
}
}
不用继承的方法(用对象形式创建窗体)
public void test(){
JFrame frame=new JFrame();
frame.setTitle("这是一个窗口");
frame.setSize(300,300);
frame.setLocation(400,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
标签:
-
标签是很简单的一种组件,一般用来显示标识性的文本信息,常被放置于其他组件的旁边起提示作用。
-
AWT提供的标签类为Label,因此,可以通过创建Label对象来使用标签。
private JLabel label; label=new JLabel("姓名"); label.setHorizontalAlignment(JLabel.CENTER); label.setForeground(Color.BLUE); public FrameDemo(){ init(); this.add(label);
按钮
-
AWT提供的按钮类为Button,他是从Component类直接继承。
private JButton button; private JButton bts[]=new JButton[10]; for (int i=0;i<bts.length;++i){ bts[i]=new JButton("按钮"+i); } public FrameDemo(){ this.add(button);
布局管理器(LayoutManager):
- 是用来安排容器中多个组件的位置及大小,以确保GUI中各组件能安排在适当合适的位置。
- 每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局管理器。
- AWT包提供一组用来进行布局管理的类,每个布局管理类对应一种布局策略。
Java中的布局类型包括:FlowLayout(流式布局),BorderLayout(边界布局),GridLayout(网格布局),CardLayout(卡片布局),BoxLayout(框布局),GridBagLayout(网格包布局)
如何设置布局
每个容器(container对象)都有一个与它相关的缺省的布局管理器。
- Applet的缺省布局是FlowLayout,Frame的缺省布局是BorderLayout,Panel的缺省布局是FlowLayout。
- 在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。
- 可以通过setLayout()方法为容器设置新的布局。
FlowLayout(组件从左上角开始从左到右,从上到下的方式排列)
FlowLayout的构造函数有:
- FlowLayout():生成一个默认的流式布局。默认居中对齐。
- FlowLayout(int alignment):可以设定每一行组件的对齐方式。
- FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离。
BorderLayout(窗口、框架和对话框等的缺省布局。组件可被置于容器的北、南、东、西或中间位置)
-
BoederLayout():生成默认的边界布局
-
BoederLayout(int horz,int vert):可以设定组件间的水平和垂直距离。
setLayout(new BorderLayout()); add(bts[0],BorderLayout.EAST); add(bts[1],BorderLayout.WEST); add(bts[2],BorderLayout.NORTH); add(bts[3],BorderLayout.SOUTH); add(bts[4],BorderLayout.CENTER);
GridLayout(组件按行和列排列)
-
GridLayout():生成一个单列的网格布局。
-
GridLayout(int row,int col):生成一个生成行数和列数的网格布局。
setLayout(new GridLayout(4,4)); for (int i=0;i<bts.length;++i){ this.add(bts[i]); }
空布局:添加组件时,组件没有大小和位置,创建组件时给定大小和位置。
public class FrameDemo extends JFrame {
label=new JLabel("姓名");
label.setSize(40,40);
label.setLocation(10,10);
}
public FrameDemo(){
init();
setLayout(null);
this.add(label);
}
文本框
-
文本框是图形界面中常用于接收用户输入或程序输出的一种组件,他只允许输入或显示单行的文本信息,且用户还可以限定文本框的宽度。
-
AWT提供的文本框类为TextFiled的,他直接继承于TextComponent,而TextComponent则从Component类继承而来。
private JTextField field; field=new JTextField("aaaa"); this.add(field);
获取屏幕大小设置在屏幕中央
Dimension dim=getToolkit().getScreenSize();
int w=dim.width/2;
this.setSize(255,125);
this.setLocation(w-255/2,h-125/2);
int h=dim.height/2;