第十八章Swing程序设计总结

18.1 swing概述

Swing是Java的一个图形用户界面(GUI)工具包,用于开发桌面应用程序。它提供了丰富的组件和工具,使得开发者可以轻松地创建具有用户友好界面的应用程序。以下是关于Swing的一些主要特点和概述:

跨平台性(Platform Independence): Swing是基于Java的,因此具有跨平台性,可以在不同操作系统上运行,而无需修改代码。

轻量级组件(Lightweight Components): Swing组件是轻量级的,不依赖于本地平台的图形用户界面组件,而是完全由Java实现。这有助于提高性能和跨平台兼容性。

丰富的组件库(Rich Set of Components): Swing提供了丰富的用户界面组件,包括按钮、文本框、标签、表格、树形控件等,开发者可以根据需要选择并组合这些组件。

可定制外观(Customizable Look and Feel): Swing允许开发者通过“外观(Look and Feel)”来定制应用程序的外观,使其看起来适应不同的操作系统或用户喜好。

事件驱动编程(Event-Driven Programming): Swing使用事件驱动的编程模型,开发者可以通过监听和响应用户的操作来实现应用程序的交互。

容易学习和使用(Easy to Learn and Use): Swing的API设计相对直观,开发者可以通过简单的代码创建复杂的GUI。

多线程支持(Multithreading Support): Swing对多线程编程提供了支持,使得开发者可以在应用程序中使用多线程以提高性能和响应性。

图形渲染(Graphics Rendering): Swing提供了图形渲染功能,开发者可以通过绘制来创建自定义的图形元素。

总体而言,Swing是一个强大而灵活的GUI工具包,适用于构建各种类型的桌面应用程序,从简单的工具到复杂的企业级应用。虽然在一些现代Java应用中,JavaFX等技术也得到了广泛应用,但Swing仍然是一个可行且广泛使用的GUI解决方案。

18.2 Swing常用窗体

18.2.1 JFrame窗体

开发Swing程序的流程可以被简单地概况为首先继承javax.swing.JFrame类创建一个窗体,然后向这个窗体中添加组件,最后为添加的组件设置监听事件

例题18.1:第一个窗体程序

18.2.2 JDialog对话框 

继承了java.awt.Dialog类,其功能是从一个窗体中弹出另一个窗体。

例题18.2:在窗体中弹出对话框 

18.2.3 JOptionPane小型对话框 

例题18.3:弹出会话框,问用户准备好了吗?

 

例题18.4:弹出会话框,询问用户是否离开

 

例题18.5:弹出会话框,让用户输入自己的姓名

例题18.6:弹出警告对话框 

18.3 常用布局管理器 

18.3.1 null绝对布局

其特点是硬性指定组件在容器中的位置大小

 例题18.7:使用绝对布局定位按钮位置和大小

 

18.3.2 FlowLayout流布局管理器 

流布局管理器是Swing中最基本的布局管理器。使用流布局管理器摆放组件时,组件被从左到右摆放。当组件占据了当前行的所有空间时,溢出的组件会被移动到下一行。

例题18.8:使用流布局排列按钮 

18.3.3 BorderLayout边界布局管理器 

BorderLayout是Java中一种简单且常用的边界布局管理器,按东、南、西、北、中的顺序摆放组件。

例题18.9:使用边界布局排列按钮 

18.3.4 GridLayout网格布局管理器 

GridLayout是Java中一种网格布局管理器,按行列网格摆放组件,简便有效的界面布局方式。

例题18.10:使用网格布局排列按钮 

18.4 常用面版 

18.4.1 JPanel面板

JPanel是Swing中的面板容器,用于组织和容纳其他组件,提供灵活的用户界面构建。

例题18.11:在一个窗体中显示4种布局风格的面板 

18.4.2 JScrollPane滚动面板 

JScrollPane是Swing中的滚动面板,提供可滚动的视图,方便显示大量数据或组件。

例题18.12:在窗体添加上下滚动条 

18.5 文字标签组件与图标 

18.5.1 JLabel标签

JLabel是Swing中的标签组件,用于在GUI中显示文本或图像。作为轻量级组件,它提供简单的文本或图像呈现,用于展示信息或标识其他组件。通过设置字体、颜色等属性,可以自定义外观。通常用于构建用户界面中的静态标签,传达简单信息或标识用户界面元素。

例题18.13:在窗体中显示文字标签 

18.5.2 图标的使用

例题18.14:在窗体中演示图标 

18.6 按钮组件 

18.6.1 JButton按钮

JButton是Swing中的按钮组件,用于触发与用户交互相关的操作。通过设置文本或图标,JButton提供可点击的界面元素,常用于实现各种功能,如提交表单、启动操作等。开发者可以添加事件监听器以响应按钮点击事件,使其在用户界面中执行特定任务,提高交互性和用户体验。

例题18.15:演示不同效果的按钮 

18.6.2 JRadioButton单选按钮 

JRadioButton是Swing中的单选按钮组件,用于在选项中进行单一选择。通常与其他JRadioButton组成按钮组,用户只能选择其中一个。提供直观的单选界面,常见于选项卡、设置面板等场景,用于实现单一选择的用户交互。

例题18.16:性别选择 

18.6.3 JCheckBox复选框 

JCheckBox是Swing中的复选框组件,允许用户选择或取消选择一个或多个选项。常见于设置、表单等场景,用于激活或禁用特定功能。通过添加ItemListener,可以捕获复选框的状态变化。提供了简便的用户界面元素,用于实现多选的交互。

例题18.17:打印用户的所选内容 

18.7 列表组件 

18.7.1 JComboBox下拉列表框

JComboBox是Swing中的下拉列表框组件,允许用户从预定义的选项中选择一个。通常用于提供用户选择的菜单,例如选择国家、城市或其他设置。JComboBox的列表项可以包含文本、图标或自定义组件。通过添加ActionListener,可以捕获用户选择的变化。JComboBox提供了简单而有效的方式,使用户能够从多个选项中进行选择。

ComboBox类的常用构造方法主要包括以下几种:

JComboBox(): 创建一个空的下拉列表框,初始时不包含任何选项。

JComboBox(Object[] items): 创建一个下拉列表框,初始时包含指定的选项数组。

JComboBox(Vector<?> items): 创建一个下拉列表框,初始时包含指定的选项向量。

JComboBox(ComboBoxModel<?> aModel): 创建一个下拉列表框,使用指定的数据模型来管理选项。

​​​​​​​

例题18.18:在下拉列表框中显示用户的所选内容 

18.7.2 JList列表框

 JList是Swing中的列表框组件,用于显示一组项目的列表。它可以显示文本、图标或自定义组件,并且支持单选、多选或不选等多种选择模式。JList通常用于展示可滚动的列表,用户可以通过滚动或直接点击选择感兴趣的项。

例题18.19:在列表框显示用户的所选内容 

18.8 文本组件 

18.8.1 JTextField文本框

JTextField类的常用构造方法主要包括以下几种:

JTextField(): 创建一个没有文本的文本框。

JTextField(int columns): 创建一个指定列数的文本框,用于指定文本框的宽度。 JTextField(String text): 创建一个包含指定文本的文本框。

JTextField(String text, int columns): 创建一个包含指定文本且具有指定列数的文本框。

这些构造方法允许你在创建JTextField实例时设置文本框的初始文本内容和显示列数。在实例化后,你可以通过调用方法来进一步配置文本框,例如设置最大长度、添加文本变化的监听器等。

例题18.20:在文本框显示默认文字并清除 

18.8.2 JPasswordField密码框 

JPasswordField是Swing中的密码框组件,用于接收和显示用户输入的密码。与普通文本框(JTextField)不同,JPasswordField的输入内容通常以点或星号等符号显示,以保护用户输入的密码不被直接可见。

JPasswordField类的常用构造方法主要包括以下几种:

JPasswordField(): 创建一个没有文本的密码框。

JPasswordField(int columns): 创建一个指定列数的密码框,用于指定密码框的宽度。 JPasswordField(String text): 创建一个包含指定文本的密码框。注意,文本在这里是一个初始字符串,而不是明文密码。

JPasswordField(String text, int columns): 创建一个包含指定文本且具有指定列数的密码框。

这些构造方法允许你在创建JPasswordField实例时设置密码框的初始文本内容和显示列数。在实例化后,你可以通过调用方法来进一步配置密码框,例如设置最大长度、添加密码变化的监听器等。

18.8.3 JTextArea文本域 

JTextArea是Swing中的文本域组件,用于显示和编辑多行文本。与单行文本框不同,JTextArea适用于需要用户输入或展示大段文本的情境,如文本编辑器、聊天应用等。它支持滚动、文本换行,通过设置行数和列数,可以调整显示区域的大小。通过添加DocumentListener,可以监听文本域内容的变化。JTextArea提供了一个灵活的界面元素,方便处理多行文本的输入和输出。

例题18.21:在文本域中显示默认文字 

18.9 表格控件 

18.9.1 创建表格

JTable类除提供默认的构造方法外,还提供被用于显示二维数组中的元素的构造方法

JTable(Object[][] rowData,Object[] columnNames)

例题18.22:创建带滚动条的表格 

18.9.2 DefaultTableModel表格数据模型 

DefaultTableModel是Swing中的表格数据模型,用于存储和管理表格中的数据。它继承自AbstractTableModel,提供了默认的实现,可以轻松地在JTable中使用。DefaultTableModel以向量(Vector)的形式组织数据,支持动态添加、删除、修改行和列。通过设置DefaultTableModel,开发者可以方便地将数据与表格进行关联,实现表格的显示和交互。

例题18.23:表格自动排序

18.9.3 维护表格模型 

维护表格模型是指对表格数据模型进行更新、添加、删除等操作,以保持表格显示与底层数据的同步。在Swing中,DefaultTableModel是一个常用的表格数据模型,通过对其进行操作可以实现表格数据的动态维护。 主要的维护表格模型的方法包括:

添加行或列: 使用addRow(Vector rowData)或addColumn(Object columnName, Vector columnData)方法添加新行或列。

删除行或列: 使用removeRow(int row)或removeColumn(int column)方法删除指定行或列。

更新数据: 使用setValueAt(Object aValue, int row, int column)方法更新指定位置的数据。

获取数据: 通过getValueAt(int row, int column)方法获取指定位置的数据。

例题18.24:对表格内容进行增删改查 

 

18.10 事件监听器

 18.10.1 ActionEvent动作事件

ActionEvent是Java中的动作事件类,用于表示用户界面组件上发生的动作。例如,按钮被点击、菜单项被选择等。ActionEvent包含了有关动作的信息,允许开发者通过事件监听器捕获和处理这些用户交互。

通常,使用ActionEvent结合ActionListener接口来实现对用户动作的监听和响应。当用户执行某个动作时,会触发ActionEvent,然后调用监听器的相应方法来执行相关操作。这种机制使得开发者能够在用户与图形用户界面进行交互时,实现相应的功能和逻辑。

例题18.25:单击按钮后,修改按钮文本 

18.10.2 keyEvent键盘事件 

KeyEvent是Java中的键盘事件类,用于表示用户在键盘上的按键动作。这包括按键按下、释放等事件。通过KeyListener接口,可以监听并响应这些键盘事件,实现与用户的键盘交互。键盘事件通常应用在需要捕获和处理用户键盘输入的场景,例如文本框的输入、游戏中的控制等。

例题18.26:虚拟键盘 

package 十八;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JButton;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

import javax.swing.JTextField;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JButton;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

import javax.swing.JTextField;

/**
 * 虚拟键盘(键盘的按下与释放)
 */
public class KeyBoard extends JFrame { // 创建“键盘”类继承JFrame
    // 声明窗体中的成员组件
    private JPanel contentPane;
    private JTextField textField;
    private JButton btnQ;
    private JButton btnW;
    private JButton btnE;
    private JButton btnR;
    private JButton btnT;
    private JButton btnY;
    private JButton btnU;
    private JButton btnI;
    private JButton btnO;
    private JButton btnP;
    private JButton btnA;
    private JButton btnS;
    private JButton btnD;
    private JButton btnF;
    private JButton btnG;
    private JButton btnH;
    private JButton btnJ;
    private JButton btnK;
    private JButton btnL;
    private JButton btnZ;
    private JButton btnX;
    private JButton btnC;
    private JButton btnV;
    private JButton btnB;
    private JButton btnN;
    private JButton btnM;
    Color green = Color.GREEN;// 定义Color对象,用来表示按下键的颜色
    Color white = Color.WHITE;// 定义Color对象,用来表示释放键的颜色

    ArrayList<JButton> btns = new ArrayList<JButton>();// 定义一个集合,用来存储所有的按键ID
    // 自定义一个方法,用来将容器中的所有JButton组件添加到集合中

    private void addButtons() {
        for (Component cmp : contentPane.getComponents()) {// 遍历面板中的所有组件
            if (cmp instanceof JButton) {// 判断组件的类型是否为JButton类型
                btns.add((JButton) cmp);// 将JButton组件添加到集合中
            }
        }
    }

    /**
     * 主方法
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() { // 使得Runnable中的的run()方法在the system EventQueue的指派线程中被调用
            public void run() {
                try {
                    KeyBoard frame = new KeyBoard(); // 创建KeyBoard对象
                    frame.setVisible(true); // 使frame可视
                    frame.addButtons();// 初始化存储所有按键的集合
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 创建JFrame窗体
     */
    public KeyBoard() { // KeyBoard的构造方法
        setTitle("\u865A\u62DF\u952E\u76D8\uFF08\u6A21\u62DF\u952E\u76D8\u7684\u6309\u4E0B\u4E0E\u91CA\u653E\uFF09"); // 设置窗体题目
        setResizable(false); // 不可改变窗体宽高
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭的方式
        setBounds(100, 100, 560, 280); // 设置窗体的位置和宽高
        /**
         * 创建JPanel面板contentPane置于JFrame窗体中,并设置面板的背景色、边距和布局
         */
        contentPane = new JPanel();
        contentPane.setBackground(Color.WHITE);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        /**
         * 创建按钮button置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
         */
        btnQ = new JButton("Q");
        btnQ.setBackground(white);
        btnQ.setVerticalAlignment(SwingConstants.TOP);
        btnQ.setHorizontalAlignment(SwingConstants.LEADING);
        btnQ.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnQ.setBounds(0, 60, 47, 45);
        contentPane.add(btnQ);
        /**
         * 创建按钮button_2置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
         */
        btnW = new JButton("W");
        btnW.setBackground(white);
        btnW.setVerticalAlignment(SwingConstants.TOP);
        btnW.setHorizontalAlignment(SwingConstants.LEADING);
        btnW.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnW.setBounds(55, 60, 49, 45);
        contentPane.add(btnW);
        /**
         * 创建按钮button_3置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
         */
        btnE = new JButton("E");
        btnE.setBackground(white);
        btnE.setVerticalAlignment(SwingConstants.TOP);
        btnE.setHorizontalAlignment(SwingConstants.LEADING);
        btnE.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnE.setBounds(110, 60, 45, 45);
        contentPane.add(btnE);
        /**
         * 创建按钮button_4置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
         */
        btnR = new JButton("R");
        btnR.setBackground(white);
        btnR.setVerticalAlignment(SwingConstants.TOP);
        btnR.setHorizontalAlignment(SwingConstants.LEADING);
        btnR.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnR.setBounds(165, 60, 45, 45);
        contentPane.add(btnR);
        /**
         * 创建按钮button_5置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
         */
        btnF = new JButton("F");
        btnF.setBackground(white);
        btnF.setVerticalAlignment(SwingConstants.TOP);
        btnF.setHorizontalAlignment(SwingConstants.LEADING);
        btnF.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnF.setBounds(195, 125, 45, 45);
        contentPane.add(btnF);
        /**
         * 创建按钮button_6置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
         */
        btnD = new JButton("D");
        btnD.setBackground(white);
        btnD.setVerticalAlignment(SwingConstants.TOP);
        btnD.setHorizontalAlignment(SwingConstants.LEADING);
        btnD.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnD.setBounds(137, 125, 45, 45);
        contentPane.add(btnD);

        btnT = new JButton("T");
        btnT.setVerticalAlignment(SwingConstants.TOP);
        btnT.setHorizontalAlignment(SwingConstants.LEADING);
        btnT.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnT.setBackground(white);
        btnT.setBounds(220, 60, 45, 45);
        contentPane.add(btnT);

        btnY = new JButton("Y");
        btnY.setVerticalAlignment(SwingConstants.TOP);
        btnY.setHorizontalAlignment(SwingConstants.LEADING);
        btnY.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnY.setBackground(white);
        btnY.setBounds(275, 60, 45, 45);
        contentPane.add(btnY);

        btnU = new JButton("U");
        btnU.setVerticalAlignment(SwingConstants.TOP);
        btnU.setHorizontalAlignment(SwingConstants.LEADING);
        btnU.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnU.setBackground(white);
        btnU.setBounds(330, 60, 45, 45);
        contentPane.add(btnU);

        btnI = new JButton("I");
        btnI.setVerticalAlignment(SwingConstants.TOP);
        btnI.setHorizontalAlignment(SwingConstants.LEADING);
        btnI.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnI.setBackground(white);
        btnI.setBounds(385, 60, 45, 45);
        contentPane.add(btnI);

        btnO = new JButton("O");
        btnO.setVerticalAlignment(SwingConstants.TOP);
        btnO.setHorizontalAlignment(SwingConstants.LEADING);
        btnO.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnO.setBackground(white);
        btnO.setBounds(440, 60, 46, 45);
        contentPane.add(btnO);

        btnP = new JButton("P");
        btnP.setVerticalAlignment(SwingConstants.TOP);
        btnP.setHorizontalAlignment(SwingConstants.LEADING);
        btnP.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnP.setBackground(white);
        btnP.setBounds(495, 60, 45, 45);
        contentPane.add(btnP);

        btnA = new JButton("A");
        btnA.setVerticalAlignment(SwingConstants.TOP);
        btnA.setHorizontalAlignment(SwingConstants.LEADING);
        btnA.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnA.setBackground(white);
        btnA.setBounds(23, 125, 45, 45);
        contentPane.add(btnA);

        btnS = new JButton("S");
        btnS.setVerticalAlignment(SwingConstants.TOP);
        btnS.setHorizontalAlignment(SwingConstants.LEADING);
        btnS.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnS.setBackground(white);
        btnS.setBounds(82, 125, 45, 45);
        contentPane.add(btnS);

        btnG = new JButton("G");
        btnG.setVerticalAlignment(SwingConstants.TOP);
        btnG.setHorizontalAlignment(SwingConstants.LEADING);
        btnG.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnG.setBackground(white);
        btnG.setBounds(251, 125, 45, 45);
        contentPane.add(btnG);

        btnH = new JButton("H");
        btnH.setVerticalAlignment(SwingConstants.TOP);
        btnH.setHorizontalAlignment(SwingConstants.LEADING);
        btnH.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnH.setBackground(white);
        btnH.setBounds(306, 125, 45, 45);
        contentPane.add(btnH);

        btnJ = new JButton("J");
        btnJ.setVerticalAlignment(SwingConstants.TOP);
        btnJ.setHorizontalAlignment(SwingConstants.LEADING);
        btnJ.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnJ.setBackground(white);
        btnJ.setBounds(361, 125, 45, 45);
        contentPane.add(btnJ);

        btnK = new JButton("K");
        btnK.setVerticalAlignment(SwingConstants.TOP);
        btnK.setHorizontalAlignment(SwingConstants.LEADING);
        btnK.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnK.setBackground(white);
        btnK.setBounds(416, 125, 47, 45);
        contentPane.add(btnK);

        btnL = new JButton("L");
        btnL.setVerticalAlignment(SwingConstants.TOP);
        btnL.setHorizontalAlignment(SwingConstants.LEADING);
        btnL.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnL.setBackground(white);
        btnL.setBounds(471, 125, 45, 45);
        contentPane.add(btnL);

        btnZ = new JButton("Z");
        btnZ.setVerticalAlignment(SwingConstants.TOP);
        btnZ.setHorizontalAlignment(SwingConstants.LEADING);
        btnZ.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnZ.setBackground(white);
        btnZ.setBounds(39, 190, 45, 45);
        contentPane.add(btnZ);

        btnX = new JButton("X");
        btnX.setVerticalAlignment(SwingConstants.TOP);
        btnX.setHorizontalAlignment(SwingConstants.LEADING);
        btnX.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnX.setBackground(white);
        btnX.setBounds(107, 190, 45, 45);
        contentPane.add(btnX);

        btnC = new JButton("C");
        btnC.setVerticalAlignment(SwingConstants.TOP);
        btnC.setHorizontalAlignment(SwingConstants.LEADING);
        btnC.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnC.setBackground(white);
        btnC.setBounds(178, 190, 45, 45);
        contentPane.add(btnC);

        btnV = new JButton("V");
        btnV.setVerticalAlignment(SwingConstants.TOP);
        btnV.setHorizontalAlignment(SwingConstants.LEADING);
        btnV.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnV.setBackground(white);
        btnV.setBounds(250, 190, 45, 45);
        contentPane.add(btnV);

        btnB = new JButton("B");
        btnB.setVerticalAlignment(SwingConstants.TOP);
        btnB.setHorizontalAlignment(SwingConstants.LEADING);
        btnB.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnB.setBackground(white);
        btnB.setBounds(315, 190, 45, 45);
        contentPane.add(btnB);

        btnN = new JButton("N");
        btnN.setVerticalAlignment(SwingConstants.TOP);
        btnN.setHorizontalAlignment(SwingConstants.LEADING);
        btnN.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnN.setBackground(white);
        btnN.setBounds(382, 190, 47, 45);
        contentPane.add(btnN);

        btnM = new JButton("M");
        btnM.setVerticalAlignment(SwingConstants.TOP);
        btnM.setHorizontalAlignment(SwingConstants.LEADING);
        btnM.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        btnM.setBackground(white);
        btnM.setBounds(449, 190, 48, 45);
        contentPane.add(btnM);
        /**
         * 创建面板panel置于面板contentPane中,设置面板panel的位置、宽高、TitledBorder、背景色以及布局方式(边界布局)
         */
        JPanel panel = new JPanel();
        panel.setBorder(new TitledBorder(null, "文本显示区", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panel.setBackground(Color.WHITE);
        panel.setBounds(0, 0, 540, 45);
        contentPane.add(panel);
        panel.setLayout(new BorderLayout(0, 0));

        /**
         * 创建文本框textField置于面板panel的中间
         */
        textField = new JTextField();
        textField.addKeyListener(new KeyAdapter() { // 文本框添加键盘事件的监听
            char word;

            @Override
            public void keyPressed(KeyEvent e) { // 按键被按下时被触发
                word = e.getKeyChar();// 获取按下键表示的字符
                for (int i = 0; i < btns.size(); i++) {// 遍历存储按键ID的ArrayList集合
                    // 判断按键是否与遍历到的按键的文本相同
                    if (String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())) {
                        btns.get(i).setBackground(green);// 将指定按键颜色设置为绿色
                    }
                }
            }

            @Override
            public void keyReleased(KeyEvent e) { // 按键被释放时被触发
                word = e.getKeyChar();// 获取释放键表示的字符
                for (int i = 0; i < btns.size(); i++) {// 遍历存储按键ID的ArrayList集合
                    // 判断按键是否与遍历到的按键的文本相同
                    if (String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())) {
                        btns.get(i).setBackground(white);// 将指定按键颜色设置为白色
                    }
                }
            }
        });
        panel.add(textField, BorderLayout.CENTER);
        textField.setColumns(10);
    }
}

 

18.10.3 MouseEvent鼠标事件 

MouseEvent是Java中的鼠标事件类,用于表示用户在图形界面上的鼠标动作,包括点击、移动、拖动等。通过MouseListener和MouseMotionListener接口,可以监听和响应这些鼠标事件。鼠标事件常用于用户与图形用户界面的交互,例如按钮点击、拖拽元素等。

例题18.27:捕捉鼠标在窗体中的行为

package 十八;

import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class MouseEventDemo extends JFrame { // 继承窗体类JFrame

    public static void main(String args[]) {
        MouseEventDemo frame = new MouseEventDemo();
        frame.setVisible(true); // 设置窗体可见,默认为不可见
    }

    /**
     * 判断按下的鼠标键,并输出相应提示
     * 
     * @param e 鼠标事件
     */
    private void mouseOper(MouseEvent e) {
        int i=e.getButton();
        if(i==MouseEvent.BUTTON1)
            System.out.println("按下的是鼠标左键");
        else if (i==MouseEvent.BUTTON2)
            System.out.println("按下的是鼠标中键");
        else if (i==MouseEvent.BUTTON3)
            System.out.println("按下的是鼠标右键");
    }

    public MouseEventDemo() {
        super(); // 继承父类的构造方法
        setTitle("鼠标事件示例"); // 设置窗体的标题
        setBounds(100, 100, 500, 375); // 设置窗体的显示位置及大小
        // 设置窗体关闭按钮的动作为退出
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JLabel label = new JLabel();
        label.addMouseListener(new MouseListener() {
            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("光标移入组件");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("鼠标按键被按下,");
                mouseOper(e);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("鼠标按键被释放,");
                mouseOper(e);
            }

            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("单机了鼠标按键,");
                mouseOper(e);
                int clickCount = e.getClickCount();
                System.out.println("单机次数为"+clickCount+"下");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("光标移除组件");
            }
        });
        getContentPane().add(label, BorderLayout.CENTER);
    }

}

结束力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值