《JAVA:从入门到精通》part 14

十七、Swing程序设计(一)

1. Swing概述

  • 原来的AWT组件来自java.awt包,当含有AWT组件的java应用程序在不同的平台上执行时,每个平台的GUI组件显示会有所不同,但是在不同平台上运行使用Swing开发的应用程序时,就可以统一GUI组件的风格,因为Swing组件允许编程人员在跨平台时指定统一的外观风格。

  • Swing组件通常被称为“轻量级组件”,因为它完全用JAVA语言编写,而JAVA是不依赖操作系统的语言,它可以在任何平台上运行;相反,依赖于本地平台的组件被称为“重量级组件”,如AWT组件就是依赖本地平台的窗口系统来决定组件的功能、外观和风格。


    窗体组件类结构

常用的Swing组件

组件名称 定义
JButton 代表Swing按钮,按钮可以带一些图片或文字
JCheckBox 代表Swing中的复选框组件
JComBox 代表下拉列表框,可以在下拉显示区域显示多个选项
JFrame 代表Swing框架类
JDialog 代表Swing版本的对话框
JLabel 代表Swing中的标签组件
JRadioButton 代表Swing的单选按钮
JList 代表能够在用户界面中显示一系列条目的组件
JTextField 代表文本框
JPasswordField 代表密码框
JTextArea 代表Swing中的文本区域
JOptionPane 代表Swing中的一些对话框

2. 常用窗体

JFrame窗体

  • JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发应用程序时可以通过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件。由于该窗体继承了JFrame类,所以它拥有“最大化”“最小化”“关闭”等按钮。

  • JFrame在程序的语法格式如下:

JFrame jf=new JFrame(title);
Container container=jf.getContentPane();
container.add(new JButton("按钮"));    //JButton按钮组件
container.remove(new JButton("按钮"));    //删除按钮组件

创建JFrame窗体实例:

package lianxi3;
import java.awt.*;

import javax.swing.*;

public class Example1 extends JFrame {
    private static final long serialVersionUID = 1L;

    // 定义一个类继承JFrame类
    public void CreateJFrame(String title) { // 定义一个CreateJFrame()方法
        JFrame jf = new JFrame(title); // 实例化一个JFrame对象
        Container container = jf.getContentPane(); // 获取一个容器
        JLabel jl = new JLabel("这是一个JFrame窗体"); // 创建一个JLabel标签
        // 使标签上的文字居中
        jl.setHorizontalAlignment(SwingConstants.CENTER);
        container.add(jl); // 将标签添加到容器中
        container.setBackground(Color.white);//设置容器的背景颜色
        jf.setVisible(true); // 使窗体可视
        jf.setSize(200, 150); // 设置窗体大小
        // 设置窗体关闭方式
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String args[]){//在主方法中调用createJFrame()方法
        new Example1().CreateJFrame("创建一个JFrame窗体");
    }
}

运行结果:

  • 创建窗体后,需要给予窗体一个关闭方式,可以调用setDefaultCloseOperation()方法关闭窗体。JAVA为窗体关闭提供了多种方式,常用的有:DO_NOTHING_ON_CLOSE、DISPOSE_ON_CLOSE、HIDE-ON_CLOSE、EXIT_ON_CLOSE。

JDialog窗体

  • JDialog窗体的功能是从一个窗体中弹出另外一个窗体,就像是在使用IE浏览器时弹出的确定对话框一样。JDialog窗体实质上就是另一种类型的窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的属性。

创建JDialog窗体实例:

package com.lzw;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

class MyJDialog extends JDialog { // 创建新类继承JDialog类

    private static final long serialVersionUID = 1L;

    public MyJDialog(MyFrame frame) {
        // 实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
        super(frame, "第一个JDialog窗体", true);
        Container container = getContentPane(); // 创建一个容器
        container.add(new JLabel("这是一个对话框")); // 在容器中添加标签
        setBounds(120, 120, 100, 100); // 设置对话框窗体大小
    }
}

public class MyFrame extends JFrame { // 创建新类

    private static final long serialVersionUID = 1L;

    public static void main(String args[]) {
        new MyFrame(); // 实例化MyJDialog类对象
    }
    
    public MyFrame() {
        Container container = getContentPane(); // 创建一个容器
        container.setLayout(null);
        JLabel jl = new JLabel("这是一个JFrame窗体"); // 在窗体中设置标签
        // 将标签的文字置于标签中间位置
        jl.setHorizontalAlignment(SwingConstants.CENTER);
        container.add(jl);
        JButton bl = new JButton("弹出对话框"); // 定义一个按钮
        bl.setBounds(10, 10, 100, 21);
        bl.addActionListener(new ActionListener() { // 为按钮添加鼠标单击事件
                    public void actionPerformed(ActionEvent e) {
                        // 使MyJDialog窗体可见
                        new MyJDialog(MyFrame.this).setVisible(true);
                    }
                });
        container.add(bl); // 将按钮添加到容器中
        
        container.add(bl);
        container.setBackground(Color.white);
        setSize(200, 200);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setVisible(true);
    }
}

运行结果:

  • 由本实例可以看到,JDialog窗体与JFrame窗体形式基本相同,甚至在设置窗体的特性时调用的方法名称都基本相同,如设置窗体大小、窗体关闭状态等。

3. 标签组件与图标

  • 在Swing中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标。在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些组件的目的,所以标签在Swing中是比较常用的组件。

标签的使用

  • public JLabel():创建一个不带图标和文本的JLabel对象
  • public JLabel(Icon icon):创建一个带图标的JLabel对象
  • public JLabel(Icon icon,int aligment):创建一个带图标的JLabel对象,并设置图标水平对齐方式
  • public JLabel(String text,int aligment):创建一个带文本的JLabel对象,并设置文字水平对齐方式
  • public JLabel(String text,Icon icon,int aligment):创建一个带文本、带图标的JLabel对象,并设置标签内容的水平对齐方式

图标的使用

  • 直接使用程序案例说明更加容易理解:

创建图标:

package com.lzw;

import java.awt.*;

import javax.swing.*;

public class DrawIcon implements Icon { // 实现Icon接口
    private int width; // 声明图标的宽
    private int height; // 声明图标的长

    public int getIconHeight() { // 实现getIconHeight()方法
        return this.height;
    }

    public int getIconWidth() { // 实现getIconWidth()方法
        return this.width;
    }

    public DrawIcon(int width, int height) { // 定义构造方法
        this.width = width;
        this.height = height;
    }

    // 实现paintIcon()方法
    public void paintIcon(Component arg0, Graphics arg1, int x, int y) {
        arg1.fillOval(x, y, width, height); // 绘制一个圆形
    }

    public static void main(String[] args) {
        DrawIcon icon = new DrawIcon(15, 15);
        // 创建一个标签,并设置标签上的文字在标签正中间
        JLabel j = new JLabel("测试", icon, SwingConstants.CENTER);
        JFrame jf = new JFrame(); // 创建一个JFrame窗口
        Container c = jf.getContentPane();
        c.add(j);
        jf.setSize(100,100);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }
}

运行结果:

使用图片图标:

package com.lzw;
import java.awt.*;
import java.net.*;

import javax.swing.*;

public class MyImageIcon extends JFrame {

    private static final long serialVersionUID = 1L;

    public MyImageIcon() {
        Container container = getContentPane();
        // 创建一个标签
        JLabel jl = new JLabel("这是一个JFrame窗体", JLabel.CENTER);
        // 获取图片所在的URL
        URL url = MyImageIcon.class.getResource("imageButton.jpg");
        Icon icon = new ImageIcon(url); // 实例化Icon对象
        jl.setIcon(icon); // 为标签设置图片
        // 设置文字放置在标签中间
        jl.setHorizontalAlignment(SwingConstants.CENTER);
        jl.setOpaque(true); // 设置标签为不透明状态
        container.add(jl); // 将标签添加到容器中
        setSize(250, 100); // 设置窗体大小
        setVisible(true); // 使窗体可见
        // 设置窗体关闭模式
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
        new MyImageIcon(); // 实例化MyImageIcon对象
    }
}

运行结果:

  • java.lang.Class类中的getResource()方法可以获取资源文件的URL路径。上例中该方法的参数是imageButton.jpg,这个路径是相对于MyImageIcon类文件的,所以可将imageButton.jpg图片文件与MyImageIcon类文件放在同一个文件夹下。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java是面向过程的编程语言:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越...
    Java小辰阅读 3,091评论 0 17
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,096评论 0 4
  • Swing 是一个为Java设计的GUI工具包。 Swing是JAVA基础类的一部分。 Swing包括了图形用户界...
    chenzg8080阅读 1,370评论 0 3
  • Java基础常见英语词汇(共70个)['ɔbdʒekt] ['ɔ:rientid]导向的 ...
    今夜子辰阅读 3,360评论 1 34