基于Swing的图形化用户界面

本文介绍了JavaGUI的基础,包括AWT和Swing组件库。Swing提供了一个完全由Java实现的GUI,支持丰富的组件和可定制的外观。在Swing中,创建GUI涉及选择布局管理器,如FlowLayout、BorderLayout和GridLayout,并使用事件处理模型来响应用户交互。文章还详细讨论了各种容器,如JFrame和JPanel,以及如何添加和管理组件。
摘要由CSDN通过智能技术生成

Java GUI概述

基于Swing的GUI构造方法

AWT事件处理模型

Swing组件

一、Java GUI概述

1、抽象窗口工具集AWT简介

设计目标是具有独立于平台的API,但同时保留每个平台的界面显示风格L&F(look and feel)

实现方法是:定义各种组件(Components)类平台独立的API,然后利用特定于平台的各种类的实现(称为对等组件,peers)提供具有特定平台风格的L&F

2、AWT组件

Java.awt包包括建立GUI所需基本组件。

Java.awt的主要类及层次关系

二、基于Swing的GUI构造方法

1、Swing简介

  • Swing中的所有组件全部用Java语言实现。

  • 采用分离模型:组件及与组件相关的数据模型(或简称模型)

  • 可设置的组件外观感觉(look and feel )

  • 与AWT相比提供更丰富的GUI组件,引入新的特征,并提供更丰富的功能。

2、基于Swing的GUI设计步骤

3、Swing中的Look&Feel

4、常用容器

容器本身也是一个组件,具有组件的所有性质,另外还具有容纳其它功能

所有的组件都可以通过add()方法向容器中添加组件

在Swing中,常用的三种类型的容器是JFrame,JPanel,JApplet

具有Swing GUI的应用必须有至少一个顶层容器

顶层Swing容器是JFrame、JDialog或JApplet的实例

Swing GUI形成顶层容器-中间层容器-基本组件的层次包容关系

(1)向顶层容器中加入组件

Swing组件不能直接添加到顶层容器中,必须添加到一个与顶层容器相关联的内容面板(Content Pane)上

对JFrame添加组件

  • 用getContentPane()方法获得JFrame的内容面板,再使用add()方法向其中加入组件。

frame.getCOntentPane().add(new Jlabel(“Hello!”));

  • 建立一个JPanel等中间容器,把组件添加到中间容器中,再用setContentPane()方法把该容器设置为JFrame的内容面板

JPanel contentPane = new JPanel();

JButton b = new JButton(“确定”);

contentPane.add(b);

… …

rame.setContentPane(contentPane);

  • 在JDK1.5后的版本中,add()方法被重写,可以把通过该方法添加的组件自动转交给内容面板

frame.add(child); //child组件将被添加到frame的内容面板中。

(2)JFrame

JFrame是最常用的顶层容器,一般作为Java Application的主窗口

(3)JPanel

JPanel是存放轻型组件的通用容器,缺省情况下是透明的,其对象可作为顶层容器的Content Pane使用。

5、Layout Manager(布局管理器)

  • 容器中组件的布局通常由Layout Manager控制。

  • Layout Manager负责决定容器的布局策略及容器内每个组件的大小

  • 每个容器都由一个缺省的Layout Manager ,可通过setLayout( )方法改变

  • Java提供的布局管理器

FlowLayout

BorderLayout

GridLayout

CardLayout

GridBagLayout

BoxLayout

6、Flow Layout Manager

组件采用从左到右,从上到下逐行摆放

例:

import java.awt.*;
       import javax.swing.*;
       public class FlowLayoutWindow extends JFrame {
      
    public FlowLayoutWindow() {
        setLayout(new FlowLayout());
        add(new JLabel("Buttons:"));
        add(new JButton("Button 1"));
        add(new JButton("2"));
        add(new JButton("Button 3"));
        add(new JButton("Long-Named Button 4"));
        add(new JButton("Button 5"));
            }
 
    public static void main(String args[]) {
        FlowLayoutWindow window = new FlowLayoutWindow();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setTitle("FlowLayoutWindow Application");
        window.pack();//窗口的大小设置为适合组件最佳尺寸与布局所需的空间
        window.setVisible(true);
    }
} 

7、Border Layout Manager

Border Layout 分5个区:

构造与安装Border Layout:

setLayout(new BorderLayout( )) -组件间无缝隙

setLayout(new BorderLayout( int hgap, int Vgap));

加入组件:

add(button, BorderLayout.CENTER)

(3)Grid Layout Manager

把窗口分成网格,n行*m列。组件从左到右,从上到下填充。

构造与安装布局管理器:

setLayout(new GridLayout(int rows, int cols));

import java.awt.*;
import javax.swing.*; 
public class GridLayoutWindow extends JFrame {
    public GridLayoutWindow() {
        setLayout(new GridLayout(0,2));
   
        add(new JButton("Button 1"));
        add(new JButton("2"));
        add(new JButton("Button 3"));
        add(new JButton("Long-Named Button 4"));
        add(new JButton("Button 5"));
        add(new JButton("6"));
    }
    public static void main(String args[]) {
        GridLayoutWindow window = new GridLayoutWindow();
        window.setTitle("GridWindow Application");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.pack();
        window.setVisible(true);
    }
}

(4)Card Layout Manager

把组件象一系列卡片一样叠放,一个时刻只能看到最上面的。

(5)GridBag Layout

GridBagLayout不需要组件的尺寸一致,容许组件扩展到多行、多列。

(6)BoxLayout

BoxLayout(箱式布局管理器)将组件垂直摆放在一列或水平摆放在一行中

8、如何选择布局管理器

组件尽量充满容器空间——使用BorderLayout或GridBagLayout

组件以自然大小紧凑的在一行中显示——FlowLayout

组件大小相同,并且成行或成列显示——GridLayout

9、GUI的设计步骤

引入Swing 包及其它程序包

选择GUI的外观风格L&F

创建并设置顶层容器

创建与添加Swing组件

显示顶层容器,将整个GUI显示出来

增加事件处理

三、AWT事件处理模型

基于Swing的GUI中,仍然采用AWT的事件处理模型

什么是事件

事件处理机制

事件目录

事件、接口、方法列表

多监听器

事件适配器

1、Event的含义

  • Events - 描述所发生事件的对象,Java中有很多不同类型的事件类,用来描述不同类型的用户动作

  • 事件源 - 产生事件的组件

  • 事件处理 - 一个接收事件对象并处理用户交互的方法

2、JDK1.0 与JDK1.2~事件处理机制

在JDK1.0中采用向上传递机制:

JDK1.2中的事件处理机制:

  • 监听器:每个事件有一个相应的监听器接口,定义了接收事件的方法。实现该接口的类,可作为监听器注册。

  • 每个组件都注册有一个或多个监听器(类),该监听器包含了能接收和处理事件的事件处理。

  • 事件对象指向已注册的监听器报告。

包含事件处理的程序应该包括以下三部分内容:

1.在事件处理类的声明中指定要实现的监听器名,如:

public class MyClass implements ActionListener {

}

2.实现监听器中的接口,如:

public void actionPerformed(ActionEvent e) {

...//响应某个动作的代码...

}

3.在一个或多个组件上将监听器类的实例注册为监听器,如:someComponent.addActionListener(instanceOfMyClass);

3、事件分类

4、事件监听器接口

5、事件接口与方法目录

6、多监听器

在同一个组件上注册多个监听器。

根据需要多次调用addXXXListener() 方法注册多个监听器。

7、Event Adapters

Adapter类实现了相应Listener接口,但所有方法体都是空的。

用户可以把自己的监听器类声明为adapter类的子类,便可以只重写需要的方法。

8、使用内部类进行事件处理

既使用Adaptor类,又避免多重继承的限制。

——在一个类中定义内部类,由内部类继承相应Adaptor类。

匿名类(Anonymous Class)是没有名字的类。可以使用匿名内部类进行事件处理。

四、Swing组件

Swing包中定义了两类组件:

■ 顶层容器(JFrame,Japplet,Jwindow,Jdialog)

■ 轻型组件(‘J’开头的所有组件,如Jbutton,Jpanel,Jmenu等)

一般如果使用Swing组件,则程序中只使用Swing组件和Swing容器。

1、Swing组件——对话框(容器类)

2、Swing组件——通用容器

3、Swing组件——特殊用途的容器

4、Swing组件—按钮类常用组件

5、Swing组件—文本类常用组件

6、Swing组件—其他常用组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值