文章目录
一、图形界面设计步骤
1、选择容器
2、确定布局
3、添加组件
4、事件处理
二、容器
1.容器分为两类
内部容器和外部容器。外部容器是可以独立存在的,如Frame;而内部容器一般嵌套在外部容器或其他内部容器中使用,如Panel类。
2.容器的功能:
1)管理组件。容器类提供了一组用于管理组件的方法,如可以使用容器类提供
add()方法向容器中添加组件;
remove()方法移除组件;
paintComponents()方法绘制组件;
getComponent()方法获取组件;
printComponents()方法打印组件等。
2)设置布局。每个容器都和一个布局管理器相关联,用以确定组件在容器中的布局。可以通过setLayout()方法为容器设置一种布局。
三、布局
1.flowlayout
是将各个组件按照添加的顺序,从左到右、从上到下进行放置,如果本行放不下所有组件,则放入下一行。Panel容器的默认布局就是FlowLayout布局。
2.Borderlayout
类似与地图上的方向,用东、西、南、北、中来安排组件的布局,分别用EAST、WEST、SOUTH、NORTH和CENTER来代表各个方向,以上北下南、左西右东占据界面的四边,CENTER占据剩余中间部分。Frame容器的默认布局就是BorderLayout布局。
3.Grildlayout
是一种网格布局,将容器划分成若干行和列的结构,在各个网格中放置组件。在网格布局中的各个组件具有相同的宽和高,其放置顺序也是从左向右开始填充,一行占满后开始填充下一行,仍然是从左到右的顺序。
4.Cardlayout
是一种卡片式的布局管理,这些卡片层叠在一起,每层放置一个组件,每次只有最外层的组件露出来。每层也可以采用面板来实现复杂的布局。
四、组件
AWT:
标签 按钮 下拉式菜单 文本框 文本区 列表 复选框 复选框组 画布 菜单 对话框 文件对话框
Swing:
标签 按钮 菜单 面板 滑动窗口 选项版 工具栏 复选框 单选框 选择框 进度条 滑动条 表格 树
五、事件监听器/适配器
当一个事件源产生一个事件时,只有为事件源注册了处理该类事件的监听器,应用程序才能对用户的操作做出响应。根据事件类型的不同,处理每类事件的监听器也有所差别。一个事件监听器可以处理一类事件,要使监听器具有处理某一类事件的能力,就需要让监听器实现响应的事件监听器接口,即一个监听器对象是一个实现了特定监听器接口(listener interface)的类的实例。
在编写监听器类时,可以采用实现监听器接口的方式;也可以采用继承适配器类的方式;还可以使用匿名内部类或Lambda表达式来完成这项工作。
六、样例
package com.ascent.ui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RegistFrame extends JFrame
{
protected JLabel tip;
public RegistFrame()
{
JPanel RegistPanel=new JPanel();
setTitle("用户注册");
Container container = this.getContentPane();
container.setLayout(new BorderLayout());
JButton normaluser = new JButton("普通用户注册");
JButton superuser=new JButton("管理员注册");
JButton exitButton = new JButton("退出");
RegistPanel.add(normaluser);
RegistPanel.add(superuser);
RegistPanel.add(exitButton);
setResizable(false);
setSize(260, 150);
setLocation(300, 100);
exitButton.addActionListener(new ExitActionListener());
superuser.addActionListener(new SuperActionListener());
normaluser.addActionListener(new NormalActionListener());
JPanel tipPanel = new JPanel();
tip = new JLabel();
tipPanel.add(tip);
container.add(BorderLayout.CENTER, RegistPanel);
container.add(BorderLayout.NORTH, tip);
}
/**
* 处理"退出"按钮事件监听的内部类
*/
class ExitActionListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
setVisible(false);
dispose();
}
}
class NormalActionListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
// 打开注册用户的窗口
Normalregist normalregist= new Normalregist();
normalregist.setVisible(true);
}
}
class SuperActionListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
// 打开注册用户的窗口
Superregist superregist = new Superregist();
superregist.setVisible(true);
}
}
}