GUI 编程(Swing 基础)

        

目录

AWT 简介

java.awt 包中控件类的体系结构图

Swing 简介

javax.swing 包中控件类的体系结构图

javax.swing.JFrame

创建一个简单的窗口

改变窗体的颜色

创建不可调整大小的窗体

设置窗体的关闭模式

javax.swing.JPanel


        到目前为止,我们在 Java 中编写的基本都是基于控制台的程序;而 Java 编程语言之所 以如此流行的一个主要原因之一,就是因为它支持图形用户界面功能,即 GU(I Graphical User Interface)。

        GUI(Graphical User Interface)即图形用户界面,就是应用程序提供给我们用户操作的 图形界面,包括窗口、菜单、工具栏及其它多种图形界面元素,如文本框、按钮、列表框、 对话框等。它能使应用程序显得更加友好。

        学习 Java 的 GUI 编程主要是要掌握两个包,分别是:java.awt、javax.swing 包,我们将 其简称为 AWT 和 Swing,这两个包中包含了 GUI 编程需要用到的丰富的类库。其中 AWT (Abstract Window Toolkit,抽象窗口工具包)中的组件有限,不能实现 GUI 编程所需的所 有功能,因此 Swing 作为 AWT 的拓展应运而生。Swing 中不仅提供了 AWT 所能提供的所 有功能,并且用纯粹的 Java 代码对 AWT 的功能进行了大幅度的扩充,所以 Swing 可以满 足 GUI 编程的所有需求,我们本章也将围绕 Swing 的基本空间和布局管理器进行讲解。

        我们需要注意的是 java.awt 包中还有一个我们经常用到的子包:java.awt.event,该包ᨀ提供了处理由 AWT 组件所激发的各类事件的接口和类,我们会在下一章中对其进行详细讲 解。

        Java 语言本身不擅长开发桌面程序,因此,工作中使用 AWT 和 Swing 极少。但是要了解一点基本知识。

AWT 简介

        GUI 编程的实现,是由一系列图形化组件来完成的,这些 GUI 的构件被称为控件; 在 Java 的早期版本中,GUI 控件由名为 AWT 的标准库来ᨀ供的。

        除了 GUI 组件外,AWT 还包括其它功能来支持图像绘画、处理剪切/复制类型的数据传 送,以及其它相关操作。

        java.awt 包是 Java 内置的包,属于 Java 基本类库(JFC)的一部分,其中包括以下内容:

  1. 便于用户输入的一组丰富的界面组件。
  2. 将组件放置在适当位置的几中布局管理器
  3. 事件处理模型。
  4. .图形和图像工具等等。
  5. 要使用到该包中的类,则必须显式地声明如下语句:import java.awt.*;

java.awt 包中控件类的体系结构图

        控件类 的父类为 Component,其直接或间接子类中有我们在图形界面中所熟悉控件,如:Frame(窗 口)、Button(按钮)、Label(标签)、Checkbox(复选框)、TextArea(多行文本框)、 TextField(单行文本框)等等。

Swing 简介

        Swing 是在 AWT 基础上发展而来的轻量级组件,与 AWT 相比不但改进了用户界面, 而且所需的系统资源更少。Swing 是纯 Java 组件,使所有的应用程序在不同的平台上运行 时具有和本机外观相同的行为。

javax.swing 包中控件类的体系结构图

        javax.swing 包中包含了一系列 Swing 控件,如果要使用该包中的类,则必须显式地声 明如下语句:import javax.swing.*;

        该包下大部分控件都继承自 java.awt 包中的控件,如:JFrame 的父类为 Frame,JComponent 的 父类为 Component 等。

javax.swing.JFrame

        JFrame 在 GUI 中为一个窗口对象,继承于 Frame。JFrame 控件用于在 Swing 程序中创 建窗体。

JFrame 常用构造方法
构造方法说明
JFrame()创建一个初始时不可见的新窗体
JFrame(String title)创建一个新的、初始不可见的、具有指定标题的窗体

        Java 语言规定在 GUI 编程中任何窗口实例化出来时默认为不可见(即隐藏)状态,所以当 我们使用构造方法实例化 JFrame 对象时,是不可见的。

JFrame 中还包含了展示窗体和很多对窗体属性(如大小、颜色等)进行设置的方法

JFrame 常用方法
方法说明
void setTitle(String title)以 title 中指定的值,设置窗体的标题
void setSize(int w, int h)设置窗体的大小,参数 w 和 h 为指定的宽度和高度
void show()显示窗体
Container getContentPane()获得窗体的内容面板,当要往窗体中添加组件或设置布局时,要使 用到该方法
void setVisible(boolean b)设置窗体是否可见,由参数 b 决定
void setResizable(boolean resizable)设置窗体是否可由用户调整大小,由参数 resizable 决定
void setBackground(Color c)设置窗体的背景色

创建一个简单的窗口

import java.awt.Color;
import javax.swing.JFrame;

public class JFrameDemo1 {
    public static void main(String[] args) {
        JFrame f = new JFrame();//创建一个新窗体
        f.setSize(500,400);//设置窗体大小
        f.setVisible(true);//设置窗体可见
        f.setBackground(Color.black);//设置颜色无效
    }
}

        如上,main 方法中的第一行代码实例化了一个窗口对象,第二行代码设置窗口的尺寸 (注意:尺寸的定位为像素),因为窗口默认为不可见,所以第三行代码设置让窗口可见。 在 JFrame 中还有一个 show()方法也可以让窗口可见,但是不推荐使用,因为 show()只能让 窗口可见,但是 setVisible 如果传入参数 true 则窗口可见,传入参数 false 则窗口不可见,所 以 setVisible 方法比 show 方法更加灵活。

        使用 setBackground 方法改变窗体颜色在 JFrame 中无效,因为该方法是继 承于 Frame 的。在 JFrame 要用:JFrame.getContentPane().setBackground(Color.bule);

改变窗体的颜色

import java.awt.Color;
import javax.swing.JFrame;

public class JFrameDemo2{
    public static void main(String[ ] args) {
        JFrame f = new JFrame();//创建一个新窗体
        f.setSize(500,400);//设置窗体大小
        f.setVisible(true);//设置窗体可见
        //f.setBackground(Color.blue);//设置颜色无效
        //若要使用 JFrame 改变窗体的颜色,需要使用该方法
        f.getContentPane().setBackground(Color.black);
    }
}

        上述两个示例中创建的窗体默认是可以由用户调整大小的,如果我们不想让窗口的大小随意调整,并且将创建窗体的代码进行封装

创建不可调整大小的窗体

import javax.swing.JFrame;

public class Test {
    public static void main(String[ ] args) {
    //调用 JFrameDemo3 的构造方法创建并显示窗体
        new JFrameDemo3();
    }
}
class JFrameDemo3 extends JFrame {
    public JFrameDemo3() {
        init();
    }
    //该方法对窗口做初始化
    private void init() {
        //设置窗口标题栏上信息
        this.setTitle("第一个窗口");
        //设置窗口大小为宽:500,高:400
        this.setSize(500, 400);
        //设置窗口不能被调整大小
        this.setResizable(false);
        //设置窗口可见
        this.setVisible(true);
    }
}

        但是该窗口关闭时,应用程序并没有结束。这是因为 Java 规定: 窗口默认的关闭模式只是不可见,这就导致我们关闭一个窗口时,窗口其实是隐藏了,而不 是程序结束了,所以要解决这个问题,需要在 init()方法中 this.setVisible(true);这句代码之前 添加 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 这个方法,该方法的功能是设 置窗口的关闭模式,它的形参为 int 型,而 JFrame 已经为各种不同的关闭模式设置了常量, JFrame.EXIT_ON_CLOSE 的意思就是关闭时退出应用程序,此外常见的其他常量还有: JFrame.DISPOSE_ON_CLOSE ( 该 常 量 的 意 思 为 : 关 闭 时 退 出 该 窗 口 ) , JFrame.DO_NOTHING_ON_CLOSE (该常量的意思为:关闭时不做任何处理)等。但是在 写 init()方法时,建议将 setVisible 方法写在 init 方法中的最后一句,窗口设置完毕后再让窗 口显示。

设置窗体的关闭模式

import javax.swing.JFrame;

public class Test {
    public static void main(String[ ] args) {
    //调用 JFrameDemo3 的构造方法创建并显示窗体
        new JFrameDemo3();
    }
}
class JFrameDemo3 extends JFrame {
    public JFrameDemo3() {
        init();
    }
    //该方法对窗口做初始化
    private void init() {
        //设置窗口标题栏上信息
        this.setTitle("第一个窗口");
        //设置窗口大小为宽:500,高:400
        this.setSize(500, 400);
        //设置窗口不能被调整大小
        this.setResizable(false);
        //关闭窗口时,程序结束
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口可见
        this.setVisible(true);
    }
}

javax.swing.JPanel

        在 GUI 编程中,如果我们要向窗口中直接添加控件(如按钮控件、标签控件、文本框 控件等)是不建议的,所以就出现了容器(JPanel),以后我们只需要在容器里加控件,然 后将容器加到窗口上即可。想象一下,窗口如同黑板的外框,我们不会在外框上写字,我们 要在被外框包含的黑板的面板上写字,那么黑板的面板就是我们的容器,写在黑板上的字就 是控件。

        JPanel 作为中间容器,用于将较小的轻量级控件组合在一起,默认情况下,它是透明的, 与窗体的内容面板类似。

JPanel 常用构造方法
构造方法说明
JPanel()创建默认布局(FlowLayout)的面板
JPanel(LayoutManager layout)以指定的布局管理器创建面板

        JPanel 的无参构造方法是在创建一个容器的时候,该容器的默认布局管理器是流式布局 (布局管理器后面会讲解)。所以如果我们要按坐标定位的方式设置该容器中各个控件的位 置,要使用参数类型为 LayoutManager 的有参构造方法,若该方法传入 null,就可以使用坐 标定位法定位每个控件在容器中的位置。

JPanel 的常用方法
方法说明
void setLayout(LayoutManager layout)以指定布局管理器设置面板的布局
Component add(Component comp)往面板内添加控件
void setBackground(Color bg)设置面板的背景色

        了解了 JPanel 类常用的构造方法和成员方法后,接下来我们在之前创建的窗口上添加 容器,并使用坐标定位法设置容器中各个控件的位置。

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test2 {
    public static void main(String[ ] args) {
        //调用 JPanelDemo 的构造方法创建并显示窗体
        new JPanelDemo();
    }
}
class JPanelDemo extends JFrame {
    private JPanel pnlMain;

    public JPanelDemo() {
        //实例化容器时使用空布局(坐标定位法)
        pnlMain = new JPanel(null);
        init();
    }
    //该方法对窗口做初始化
    private void init() {
        //关闭窗口时,程序结束
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口标题栏上信息
        this.setTitle("第一个窗口");
        //设置窗口大小为宽:500,高:400
        this.setSize(500, 400);
        //设置窗口不能被调整大小
        this.setResizable(false);
        //此行代码是给容器设置背景颜色
        pnlMain.setBackground(Color.black);
        //将容器添加在窗口上
        this.add(pnlMain);
        //设置窗口可见
        this.setVisible(true);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值