[Java进阶] Swing两万字大总结一(超详细教程,这不得收藏一波)

本文详细介绍了Java Swing GUI组件的使用,包括JFrame窗体、JDialog对话框、JLabel标签、JButton按钮、JRadioButton单选按钮、JCheckBox复选框、JTextField文本框、JPasswordField密码框、JTextArea文本域、JComboBox下拉列表框和JList列表框。通过实例展示了各组件的创建、属性设置和事件处理,帮助读者深入理解Swing组件的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🦄 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Java入门
🌠 首发时间:2022年5月21日
✅ 如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦

🔥下期预告:面板、布局管理器、监听器

⓵ 前言

和早期版本中的 AWT 相比,Swing 更为强大、性能更优良,它除了保留了 AWT 中几个重量级组件之外,其他组件都为轻量级组件。这样。使用 Swing 开发出的窗体风格会与当前运行平台上的窗体风格一致。同时,程序员也可以在跨平台时指定窗体统一的风格与外观。

⓶ Swing概述

GUI(图形用户界面)为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的 GUI,使其能够在所有的平台上运行,但 Java 1.0 中基础类 AWT(抽象窗口工具箱)并没有达到这个要求,于是 Swing 出现了,它是 AWT 组件的增强组件,但是它又不能完全替代 AWT 组件,这两种组件需要同时出现在一个图形用户界面中。

🐱 Swing的特点

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

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

Swing 主要具有以下特点。
(1) 轻量级组件
(2) 可插入外观组件

🐱 Swing包

为了有效地使用 Swing 组件,必须了解 Swing 包的层次结构和继承关系,其中比较重要的类是 Component 类、Container 类和 JComponent 类。下图描述了这些类的层次和继承关系。

Swing 组件中的大多数 GUI 组件都是 Component 类的直接子类或间接子类,JComponent 类是 Swing 组件各种特性的存放位置,这些组件的特性包括设定组件边界、GUI 组件自动滚动等。

Swing 组件中的最重要的父类是 Container 类,Container 类又有两个最重要的子类,分别为 java.awt.Windowjava.awt.Frame。除了以往的 AWT 类组件会继承这两个类之外,现在的 Swing 组件同样也会扩展了这两个类。

从上图中我们可以看到,顶层父类是 Component 类与 Container 类,所以 Java 关于窗口组件的编写,都与组件及容器的概念相关联。

🐱 常用组件概述

下面给出基本的 Swing 组件的概述,表中列举了常用的 Swing 组件及其含义。

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

⓷ 常见顶层窗体

窗体作为 Swing 应用程序中组件的承载体,处于非常重要的位置。Swing 中常用的窗体包括 JFrameJDialog 窗体,下面我们将会讲解这两个窗体的使用方法。

🐱 JFrame 窗体

JFrame 窗体是一个容器,它是 Swing 程序中各个组件的载体,因此,可以将 JFrame 看作是承载这些 Swing 组件的容器。

在开发应用程序时,可以通过继承 java.swing.JFrame 类来创建一个窗体,然后再在窗体中添加组件,同时为组件设置事件。由于该窗体继承了 JFrame 类,所以它拥有最大化、最小化和关闭按钮。

下面将详细讲解 JFrame 窗体在 Java 应用程序中的使用方法。

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

JFrame frame = new JFrame(title);
Container container = frame.getContentPane();

frameJFrame 类的对象。
containerContainer 类的对象,可以使用 JFrame 对象调用 getContentPane() 方法获取。

我们应该有这样的一个概念,就是 Swing 组件的窗体通常与组件和容器相关,所以在 JFrame 对象创建完成后,需要调用 getContentPane() 方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器。通常这个容器用来包含和显示组件。如果需要将组件添加至容器,那么可以使用来自 Container 类的 add() 方法进行设置,示例代码如下:

container.add(new JButton("按钮"));                     //JButton按钮组件

在容器中添加组件后,也可以使用 Container 类的 remove() 方法将这些组件从容器中删除,示例代码如下:

container.remove(new JButton("按钮"));

我们来看看下面这个实例,该实例使用 JFrame 对象创建了一个窗体,然后在其中添加一个组件。

在项目中创建 MyFrame 类,该类继承 JFrame 类成为窗体类,然后在该类中创建标签组件,并添加到窗体界面中。

import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame {                       	//定义一个类继承JFrame类

    public void CreateJFrame(String title) {                	//定义一个CreateJFrame()方法

        JFrame frame = new JFrame(title);                     	 //实例化一个JFrame对象
        Container container = frame.getContentPane();          	// 获取一个容器
        container.setBackground(Color.CYAN);                  	//设置容器的背景颜色

        JLabel jl = new JLabel("这是一个JFrame窗体");        	//创建一个JLabel标签
        jl.setHorizontalAlignment(SwingConstants.CENTER);       //使标签上的文字居中
        container.add(jl);                                      // 将标签添加到容器中


        frame.setVisible(true);                                //使窗体可视
        frame.setBounds(400,300,400, 300);  				   //设置窗体显示位置和大小
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);         //设置窗体关闭方式
    }

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

运行本实例程序,结果如下所示:
在这里插入图片描述

上述程序中的 MyFrame 类继承了 JFrame 类,在 CreateJFrame() 方法中实例子化 JFrame 对象。JFrame 类的常用构造方法包括下面两种形式。

public JFrame()

public JFrame(String title)

JFrame 类中的两种构造方法分别为无参的构造方法与有参的构造方法:

第一种形式的构造方法创建一个初始不可见、没有标题的新窗体。

第二种形式的构造方法在实例化该 JFrame 对象时,创建一个不可见但具有标题的窗体。

我们可以使用 JFrame 对象调用 show() 方法使窗体可见,但是这个方法早已被新版 JDK 弃用,现在通常使用 setVisible(true) 方法使窗体可见。

同时,可以使用 setBounds(x,y,width, height) 方法设置窗体显示位置和大小,其中 xy 为窗体左上角坐标,widthheight 为窗体的宽和高。

创建窗体后,需要给予窗体一个关闭方式,可以调用 setDefaultCloseOperation() 方法关闭窗体。

Java为关闭窗体提供了多种方式,常用的有4种方式,分别为:DO_NOTHING_ON_CLOSEDISPOSE_ON_CLOSEHIDE_ON_CLOSEEXIT_ON_CLOSE,这几种操作实质上是将一个 int 类型的常量封装在 javax.swing.WindowConstants 接口中。

具体含义如下:

关闭窗体方式描述
EXIT_ON_CLOSE退出应用程序,默认窗口关闭
DO_NOTHING_ON_CLOSE什么都不做就将窗体关闭
DISPOSE_ON_CLOSE移除窗口的默认窗口关闭操作
HIDE_ON_CLOSE隐藏窗口的默认窗口关闭

🐱 JDialog 窗体

JDialog 窗体是 Swing 组件中的对话框,它继承了 AWT 组件中的 java.awt.Dialog 类。

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

在应用程序中创建 JDialog 窗体需要实例化 JDialog 类,通常使用以下几种 JDialog 类的构造方法。

构造方法描述
public JDialog()创建一个没有标题和父窗体的对话框
public JDialog(Frame f)创建一个指定父窗体的对话框,但该窗体没有标题
public JDialog(Frame f, boolean model)创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题
public JDialog(Frame f, String title)创建一个指定标题和父窗体的对话框
public JDialog(Frame f, String title, boolean model)创建一个指定标题、窗体和模式的对话框

下面我们来看一个实例,该实例主要实现单击 JFrame 窗体中的按钮后弹出另一个对话框窗体的功能。

要求:在项目中创建 MyJDialog 类,该类继承 JDialog 窗体,然后在窗体中添加一个按钮,当用户单击该按钮后,程序将弹出一个对话框窗体。

import javax.swing.*;
import java.awt.*;

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

    public MyJDialog(MyFrame frame) {
        //实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
        super(frame, "JDialog窗体", true);

        Container container = getContentPane();                    //创建一个容器
        container.add(new JLabel("这是一个对话框"));           //在容器中添加标签
        setBounds(120, 120, 150, 100);          //设置对话框窗体大小
    }
}

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

    public MyFrame() {
        Container container = getContentPane();                 //创建一个容器
        container.setLayout(null);

        JLabel label = new JLabel("这是一个JFrame窗体");      //在窗体中设置标签
        label.setHorizontalAlignment(SwingConstants.CENTER);    //将标签的文字置于标签中间位置
        container.add(label);

        JButton button = new JButton("点我弹出对话框");         //定义一个按钮
        button.setBounds(10, 10, 150, 20);

        //为按钮添加鼠标单击事件
        button.addActionListener(e -> {
            //使MyJDialog窗体可见
            new MyJDialog(MyFrame.this).setVisible(true);
        });

        container.add(button);                             // 将按钮添加到容器中
        container.setBackground(Color.white);

        setSize(400,300);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setVisible(true);
    }

    //main方法
    public static void main(String args[]) {
        // 实例化MyJDialog类对象
        new MyFrame();
    }
}

运行本实例,运行结果如下图所示:
在这里插入图片描述

本实例为了使对话框在父窗体中弹出,定义了一个 JFrame 窗体,然后在该窗体中添加一个按钮,并为此按钮添加一个鼠标单击监听事件(这儿使用了 lambda 表达式),这里使用 “new MyJDialog().setVisible(true)” 语句使对话框窗体可见,这样就实现了当用户单击该按钮后将弹出对话框的功能。

由于 MyJDialog 类继承了 JDialog 类,所以可以在构造方法中使用 super 关键字调用 JDialog 构造方法。这里使用了 “public JDialog(Frame f, String title, boolean model)” 这种形式的构造方法,同时设置了自定义的 JFrame 窗体及对话框的标题和窗体类型。

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

⓸ 应用基本组件

软件界面是软件和用户之间的交流平台,而组件则是构成软件界面的基本元素,是软件和用户之间的交流途径。例如,用标签组件来显示相关信息,用单选按钮、复选框、文本框等接受用户的输入信息,用按钮来提交用户的输入信息等等。

🐱 标签组件:JLabel

JLabel 组件显示文本和图像时,不仅可以只显示其中的一者,而且可以同时显示。在通过构造方法创建组件对象时,可以设置标签内容相对于组件的水平显示位置。

JLabel 类提供的所有构造方法如下表所示:

构造方法描述
JLabel()创建一个既无文本内容,又无图像内容的标签
JLabel(String text)创建一个具有文本内容的标签
JLabel(String text, int horizontalAlignment)创建一个具有文本内容并且指定水平显示位置的标签
JLabel(Icon icon)创建一个具有图像内容的标签
JLabel(Icon icon, int horizontalAlignment)创建一个具有图像内容并且指定水平显示位置的标签
JLabel(String text, Icon icon, int horizontalAlignment)创建一个既有文本内容,又有图像内容,并且指定水平显示位置的标签

构造方法中的入口参数 horizontalAlignment 可以从 JLabel 类的静态常量中选择,可选的静态常量如下表所示:

静态变量常量值标签内容显示位置
LEFT2靠左侧显示
CENTER0居中显示
RIGHT4靠右侧显示

JLabel 类中提供了众多的方法,方便程序员设置标签的内容,常用方法有以下几个:

方法描述
setText(String text)设置要显示的文本
setIcon(Icon icon)设置要显示的图像
setHorizontalAlignment(int alignment)设置标签内容在水平方向的对齐方式
setHorizontalTextPosition(int textPosition)设置文本相对于图像在水平方向的位置
setVerticalAlignment(int alignment)设置标签内容在垂直方向的对齐方式
setVerticalTextPosition(int textPosition)设置文本相对于图像在垂直方向的位置
setIconTextGap(int iconTextGap)设置文本和图像之间的距离,单位为像素,默认为 4 像素
setEnabled(boolean enabled)设置标签是否可用,设为 false 时表示不可用,默认为可用
setDisabledIcon(Icon disabledIcon)设置当标签不可以时显示的图像

下面我们将通过一个例子来进一步了解 JLabel 组件的使用方法。

要求:首先将窗口标题修改为 “添加标签”,然后创建一个带有指定文本的标签对象,并为标签添加一幅图像,设置标签内容的显示位置,最后将标签设置为不可用,并设置标签在不可用的情况下显示另一幅图像。

import javax.swing.*;

public class MyFrame extends JFrame {       //创建新类
    JLabel label;

    public MyFrame() {
        //修改窗口标题
        setTitle("添加标签");

        label = new JLabel("我是一个JLabel!", JLabel.CENTER);                               //创建指定文本的标签对象

        label.setIcon(new ImageIcon("C:\\Users\\15269\\Desktop\\自行车.png"));              //为标签添加图像

        label.setHorizontalTextPosition(JLabel.CENTER);                                    //设置文本相对于图像的水平位置

        label.setVerticalTextPosition(JLabel.BOTTOM);                                     //设置文本相对于图像的垂直位置

        label.setEnabled(false);                                                       	  //设置标签为不可用

        label.setDisabledIcon(new ImageIcon("C:\\Users\\15269\\Desktop\\射箭.png"));      //设置标签在不可用的情况下显示的图像

        add(label);  // 将标签添加到窗口中

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400,300,800,650);
        setVisible(true);
    }

    //main方法
    public static void main(String args[]) {
        new MyFrame();
    }
}

直接运行该实例,将会显示如下图所示的窗口:

在标签不可用的情况下文字是灰色的,如果未设置标签在不可用的情况下显示其他图像,那么显示的原图像也将是灰色的,比如我们将 label.setDisabledIcon(new ImageIcon(“C:\Users\15269\Desktop\射箭.png”)) 这一行注释掉,将会得到下图这样的图像:
在这里插入图片描述
如果我们将 label.setEnabled(false) 注释掉,将会得到这样的结果:
在这里插入图片描述

🐱 按钮组件

Swing 中的按钮是较为常见的组件,它用于触发特定动作。Swing 提供了很多种按钮,包括提交按钮、复选框按钮、单选按钮等,这些按钮都是从 AbstractButton 类中继承而来的。

🐶 普通按钮:JButton

Swing 中的普通按钮由 JButton 对象表示,其构造方法主要有如下几种形式:
① public JButton()
② public JButton(String text)
③ public JButton(Icon icon)
④ public JButton(String text, Icon icon)

通过使用上述构造方法,在 Swing 按钮上不仅能显示文本标签,还可以显示图标。上述构造方法中的第一个构造方法可以生成不带任何文字和图标的组件,然后根据需要再使用相应的方法为按钮设置指定的文本和图标,其他构造方法都在初始化时指定了按钮上显示的图标或文字。

下面我们通过一个简单的例子来进一步了解 JButton 的使用。

创建窗体,然后在窗体中添加两个按钮组件,分别用于显示文本内容与图片内容。

import javax.imageio.ImageIO;
import javax.swing.*;
import java.io.*;

public class MyFrame extends JFrame {       //创建新类
    JPanel root;
    JButton messageButton,imageButton;

    public MyFrame() throws IOException {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        //按钮添加文字
        messageButton = new JButton("普通按钮");        //定义显示文本内容的按钮
        messageButton.setBounds(54, 68, 100, 40);      //设置按钮显示位置和大小
        root.add(messageButton);                       //将按钮添加到面板容器中

        //按钮添加图标
        ImageIcon icon = new ImageIcon(ImageIO.read(new File("C:\\Users\\15269\\Desktop\\坏笑.png")));                                             //定义图片对象
        imageButton = new JButton(icon);                //定义显示图片的按钮对象
        imageButton.setBounds(196, 40, 120, 120);       //定义按钮显示位置
        root.add(imageButton);                          //就按钮显示在面板中

        //设置窗口风格
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(400,300,400,300);
        setVisible(true);
    }

    //main方法
    public static void main(String args[]) throws IOException {
        new MyFrame();
    }
}

运行本程序,结果如下图所示:
在这里插入图片描述

🐶 单选按钮:JRadioButton

默认情况下的单选按钮显示为一个圆形图标,在该图标旁通常放置一些说明性文字。为了使多个单选按钮表现出某种功能,应用程序一般将多个单选按钮放置在按钮组中,即当用户选中某个单选按钮后,按钮组 中其他按钮将被自动取消选中。

单选按钮是 Swing 组件中 JRadioButton 类的对象,该类是 JToggleButton 的子类,而 JToggleButton 类又是 AbstractButton 类的子类,因此,单选按钮的一系列控制方法都是 AbstractButton 类中的方法。

(1) 单选按钮
可以使用 JRadioButton 类中的构造方法创建单选按钮对象。

JRadioButton 类的常用构造方法主要有以下几种形式:
① public JRadioButton()
② public JRadioButton(Icon icon)
③ public JRadioButton(Icon icon, boolean selected)
④ public JRadioButton(String text)
⑤ public JRadioButton(String text, Icon icon)
⑥ public JRadioButton(String text, Icon icon, boolean selected)

通过观察上述构造方法的形式,我们知道在初始化单选按钮时可以同时设置单选按钮的图标、文字及默认是否被选中等属性。

(2) 按钮组
Swing 存在一个 ButtonGroup 类,该类用于产生按钮组。如果希望将所有的单选按钮放置在按钮组中,那么我们需要实例化一个 JRadioButton 对象,并使用该对象调用 add() 方法添加单选按钮。

下面我们让通过一个简单的例子来看一下,创建窗体,然后在窗体中添加单选按钮。

import javax.swing.*;

public class MyFrame extends JFrame {       
    JPanel root;
    JRadioButton radioButton, radioButton_1, radioButton_2, radioButton_3;

    public MyFrame() {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        //定义单选按钮
        radioButton = new JRadioButton("学习");
        radioButton_1 = new JRadioButton("打豆豆");
        radioButton_2 = new JRadioButton("运动");
        radioButton_3 = new JRadioButton("旅行");

        //定义按钮显示位置和大小
        radioButton.setBounds(45, 29, 73, 23);
        radioButton_1.setBounds(134, 29, 121, 23);
        radioButton_2.setBounds(45, 74, 73, 23);
        radioButton_3.setBounds(134, 74, 121, 23);

        //将按钮添加到面板中
        root.add(radioButton);
        root.add(radioButton_1);
        root.add(radioButton_2);
        root.add(radioButton_3);

        //定义按钮组控件
        ButtonGroup group = new ButtonGroup();

        //将单选按钮添加到按钮组中
        group.add(radioButton);
        group.add(radioButton_1);
        group.add(radioButton_2);
        group.add(radioButton_3);

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 271, 161);
        setVisible(true);
    }

    //main方法
    public static void main(String args[]) {
        new MyFrame();
    }
}

本实例运行结果如下图所示:
在这里插入图片描述

从上面的代码可以看出,单选按钮与按钮组的用法基本类似,只是按钮组在实例化单选按钮对象后还需要将其添加到按钮组中。

🐶 复选框:JCheckBox

Swing 组件中的复选框的使用也非常广泛,一般情况下,它显示为一个方块图标,外加一段描述性文字。与单选按钮不同的是复选框可以进行多选选择,每一个复选框都提供 “选中” 与 “不选中” 两种状态。复选框由 JCheckBox 类的对象表示,它同样继承于 AbstractButton 类,所以复选框组件的属性设置也来源于 AbstractButton 类。

JCheckBox 的常用构造方法如下:
① public JCheckBox()
② public JCheckBox(Icon icon, Boolean checked)
③ public JCheckBox(String text, Boolean checked)

复选框与其他按钮的设置基本相同,除了可以在初始化时设置图标之外,还可以设置复选框的文字域是否被选中。

下面让我们来看一个实例,将滚动面板与复选框结合使用。
要求:在项目中创建 CheckBoxFrame 类,该类继承 JFrame 类成为窗体组件,在类中设置窗体添加多个复选框。

import javax.swing.*;

public class CheckBoxFrame extends JFrame {
    JPanel root;
    JCheckBox checkBox,checkBox_1,checkBox_2,checkBox_3;

    public CheckBoxFrame() {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        //定义复选框组件
        checkBox = new JCheckBox("C");
        checkBox_1 = new JCheckBox("C++");
        checkBox_2 = new JCheckBox("Java");
        checkBox_3 = new JCheckBox("Python");

        //设置复选框显示位置和大小
        checkBox.setBounds(31, 28, 73, 23);
        checkBox_1.setBounds(132, 28, 73, 23);
        checkBox_2.setBounds(31, 75, 54, 23);
        checkBox_3.setBounds(132, 75, 74, 23);

        //往面板中添加复选框
        root.add(checkBox);
        root.add(checkBox_1);
        root.add(checkBox_2);
        root.add(checkBox_3);

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 271, 161);
        setVisible(true);
    }

    //main方法
    public static void main(String args[]) {
        new CheckBoxFrame();
    }
}

运行本实例,运行结果如下图所示:
在这里插入图片描述

🐱 文本组件

在现实项目开发中,文本组件是使用最为广泛的组件,尤其是文本框与密码框组件,通过文本组件可以很轻松地处理单行文字、多行文字、口令字段。下面我们来看文本组件的定义及其使用。

🐶 文本框:JTextField

文本框用来显示或编辑一个单行文本,通过 Swing 中的 JTextField 类对象创建,该类继承了 javax.swing.text.JTextComponent 类。

下面列举了一些常用的创建文本框的构造方法。
① public JTextField()
② public JTextField(String text)
③ public JTextField(int fieldwidth)
④ public JTextField(String text, int fieldwidth)
⑤ public JTextField(Document docModel, String text, int fieldWidth)

从上面的构造方法中,我们可以看出,定义 JTextField 组件很简单,并且可以在初始化文本框时设置文本框的默认文字、文本框的长度等。

下面让我们来看一个关于文本框的实例。
要求:在项目中创建 JTextFieldFrame 类,该类继承 JFrame 类成为窗体组件,然后向该窗体添加标签组件和文本框组件。

import javax.swing.*;

public class JTextFieldFrame extends JFrame {
    JPanel root;
    JLabel userNameLabel,passWordLabel;
    JTextField userTextField,passWordTextField;
    JButton enterButton,closeButton;

    public JTextFieldFrame() {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        //用户名标签
        userNameLabel = new JLabel("用户名:");
        userNameLabel.setBounds(52, 33, 54, 15);
        root.add(userNameLabel);

        //用户名文本框
        userTextField = new JTextField(12);
        userTextField.setBounds(116, 30, 139, 21);
        root.add(userTextField);

        //密码标签
        passWordLabel = new JLabel("密 码:");       //定义标签对象
        passWordLabel.setBounds(52, 74, 54, 15);
        root.add(passWordLabel);

        //密码文本框
        passWordTextField = new JTextField(12);
        passWordTextField.setBounds(116, 71, 139, 21);
        root.add(passWordTextField);

        //登录按钮
        enterButton = new JButton("登录");          //定义按钮对象
        enterButton.setBounds(64, 116, 69, 23);
        root.add(enterButton);

        //退出按钮
        closeButton = new JButton("退出");
        closeButton.setBounds(174, 116, 69, 23);
        root.add(closeButton);

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 340, 256);
        setVisible(true);
    }

    //main方法
    public static void main(String[] args) {
        new JTextFieldFrame();
    }
}

该实例运行结果如下图所示:
在这里插入图片描述

🐶 密码框:JPasswordField

密码框与文本框的定义和用法基本相同,它们俩的区别是密码框使用户输入的字符串以某种符号进行加密。密码框对象是通过 JPasswordField 类 来 创 建 的,JPasswordField 类的构造方法与 JTextField 类的构造方法非常相似,下面列举几个常用的构造方法:
① public JPasswordField()
② public JPasswordFiled(String text)
③ public JPasswordField(int fieldwidth)
④ public JPasswordField(String text, int fieldwidth)
⑤ public JPasswordField(Document docModel, String text, int fieldWidth)

在程序中定义密码框,示例代码如下。

JPasswordField jp = new JPasswordField();
jp.setEchoChar('#');       //设置回显字符

使用 JPasswordField 类中所提供的 setEchoChar() 方法,可以改变密码框的回显字符。

下面我们运用密码框对前面的登录界面进行改进,代码如下:

import javax.swing.*;

public class JTextFieldFrame extends JFrame {
    JPanel root;
    JLabel userNameLabel,passWordLabel;
    JTextField userTextField;
    JButton enterButton,closeButton;
    JPasswordField passWordTextField;

    public JTextFieldFrame() {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        //用户名标签
        userNameLabel = new JLabel("用户名:");
        userNameLabel.setBounds(52, 33, 54, 15);
        root.add(userNameLabel);

        //用户名文本框
        userTextField = new JTextField(12);
        userTextField.setBounds(116, 30, 139, 21);
        root.add(userTextField);

        //密码标签
        passWordLabel = new JLabel("密 码:");       //定义标签对象
        passWordLabel.setBounds(52, 74, 54, 15);
        root.add(passWordLabel);

        //密码文本框
        passWordTextField = new JPasswordField(12);
        passWordTextField.setBounds(116, 71, 139, 21);
        passWordTextField.setEchoChar('●');       //设置回显字符
        root.add(passWordTextField);

        //登录按钮
        enterButton = new JButton("登录");          //定义按钮对象
        enterButton.setBounds(64, 116, 69, 23);
        root.add(enterButton);

        //退出按钮
        closeButton = new JButton("退出");
        closeButton.setBounds(174, 116, 69, 23);
        root.add(closeButton);

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 340, 256);
        setVisible(true);
    }

    //main方法
    public static void main(String[] args) {
        new JTextFieldFrame();
    }
}

改进后的运行结果如下:
在这里插入图片描述

🐶 文本域:JTextArea

文本域组件是一个非常常见而又十分重要的组件,用来接受用户的多行文字输入,它的使用也非常简单。

Swing 中的任何一个文本域都是 JTextArea 类型的对象,JTextArea 常用的构造方法如下:
① public JTextArea()
② public JTextArea(String text)
③ public JTextArea(int rows, int columns)
④ public JTextArea(Document doc)
⑤ public JTextArea(Document doc, String Text, int rows, int columns)

通过上述构造方法,我们可以在初始化文本域时提供默认文本、设置文本域的长与宽。

下面让我们通过一个实例来更好地理解和使用文本域。
要求:在项目中创建 JTextAreaFrame 类,该类继承 JFrame 类成为窗体组件,然后向该窗体中添加文本域组件。

import javax.swing.*;

public class JTextAreaFrame extends JFrame {
    JPanel root;
    JTextArea textArea;

    public JTextAreaFrame(String title) {
        super(title);

        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        textArea = new JTextArea();              //定义文本域组件
        textArea.setLineWrap(true);              //设置文本域自动换行
        textArea.setBounds(20, 10, 290, 200);
        root.add(textArea);                      //将文本域添加到面板

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 340, 260);
        setVisible(true);
    }

    //main方法
    public static void main(String[] args) {
        new JTextAreaFrame("JTextArea");
    }
}

该实例运行结果如下:
在这里插入图片描述

JTextArea 类的 setLineWrap() 方法可以设置文本域的自动换行属性。文本域对象的初始状态是不允许换行的,调用该方法并给定参数 true,就可以将文本域设置为自动换行状态啦。

🐱 列表组件

Swing 提供了两种列表组件,分别为下拉列表框与列表框。

下拉列表框与列表框都是带有多个选项的组件,用户可以从中选择需要的选项。和下拉列表框相比,列表框显得更直观一些,它将所有选项罗列在列表框中,而下拉列表框显得更为便捷和美观,它将所有的项目隐藏起来,当用户需要选用其中的选项时才会显现出来。

🐶 下拉列表框:JComboBox

(1) JComoBox类
初次使用 Swing 中的下拉列表框时,会感觉到 Java 中的下拉列表框与 Windows 操作系统中的下拉列表框类似,但是实质上两者并不相同,Swing 中的下拉列表框不仅支持用户从中选择选项,同时还支持用户编辑项目中的内容。

下拉列表框是一个带条状的显示区,它具有下拉功能。在下拉列表框的右边存在一个倒三角形的按钮,当用户单击该按钮时,下拉列表框中的选项将会以列表的形式显示出来。

Swing 中的下拉列表框使用 JComboBox 类对象来表示,它是 javax.swing.JComponent 类的子类。

JComboBox 的常用构造方法如下。
① public JComboBox()
② public JComboBox(ComboBoxMode dataModel)
③ public JComboBox(Object[] arrayData)
④ public JComboBox(Vector vector)

在初始化下拉列表框时,既可以选择同时指定下拉列表框中的选项内容,也可以在程序中使用其他方法设置下拉列表框中的内容。下拉列表框中的内容可以被封装在 ComboBoxModel 类型、数组或者 Vector 类型中。

(2) JCcomboBox 模型
在开发程序时,一般将下拉列表框中的选项封装在 ComboBoxModel 类型中。ComboBoxModel 类型为接口,它代表一般模型,可以自定义一个类实现该接口,然后在初始化 JComboBox 对象时向上转型为 ComboBoxModel 接口类型,但是必须实现下面的两个方法:

① public void setSelectedItem(Object item)
② public Object getSelectedItem()

其中,setSelectedItem() 方法是设置下拉列表框的选中项,getSelectedItem() 方法用于返回下拉列表框中的选中项,有了这两个方法,我们就可以轻松地对下拉列表框中的项目进行操作。

自定义的这个类除了可以实现该接口外,还可以继承 AbstractListModel 类,在该类中也有两个操作下拉列表框的重要方法:

① getSize():返回列表的长度。
② getElementAt(in index):返回指定索引处的值。

下面让我们通过一个实例来更好地理解和使用下拉列表框。
要求:在项目中创建 JListDemoFrame 类,该类继承 JFrame 类成为窗体组件,然后向该窗体中添加下拉列表框组件。

import javax.swing.*;

public class JComboBoxFrame extends JFrame {
    JPanel root;
    JLabel messageLabel;
    JComboBox comboBox;

    public JComboBoxFrame(String title) {
        super(title);

        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        messageLabel = new JLabel("请选择你的星座:");             //定义标签组件
        messageLabel.setBounds(31, 25, 130, 15);    //设置标签组件大小
        root.add(messageLabel);

        //定义字符串数组对象
        String[] constellations = {
                "白羊座", "金牛座", "双子座", "巨蟹座",
                "狮子座", "处女座", "天秤座", "天蝎座",
                "射手座", "摩羯座", "双鱼座", "水瓶座"
        };
        comboBox = new JComboBox(constellations);                    //定义下拉列表框组件
        comboBox.setBounds(130, 22, 100, 21);     //设置列表大小
        root.add(comboBox);                                         //将下拉列表添加到面板

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 310, 230);
        setVisible(true);
    }

    //main方法
    public static void main(String[] args) {
        new JComboBoxFrame("JComboBox");
    }
}

该实例运行结果如下:
在这里插入图片描述

🐶 列表框:JList

与下拉列表框相比,列表框将所有选项显示在列表框中,在窗体上占据固定的大小,如果列表框中的选项较多,需要具有滚动效果,那么可以将列表框放入滚动面板中。用户在选择列表框中的某一项后,按住 Shift 键并选择列表框中的其他选项,其他选项也会被选中。用户也可以按住 Ctrl 键并单击列表框中的项目,这样,列表框中的项目就处于非选中状态。

Swing 使用 JList 类对象来表示列表框,下面列举几个常用的构造方法:

① public void JList()
② public void JList(Object[] listData)
③ public void JList(Vector listData)
④ public void JList(ListMode dataModel)

在上述构造方法中,存在一个没有参数的构造方法,当使用该方法进行构造时,用户既可以在初始化列表框后使用 setListData() 方法对列表框进行设置,也可以在初始化的过程中对列表框中的选项进行设置。设置的方式有三种,分别为数组、Vector 类型和 ListModel 模型。

当使用数组作为构造方法的参数时,首先需要创建列表选项的数组,然后再利用构造方法来初始化列表框。

使用数组作为初始化列表框的参数,示例代码如下:

String[] contents={"列表1","列表2","列表3","列表4"};
JList jl = new JList(contents);

如果使用上述构造方法中的第三种构造方法,那么通常将 Vector 类型的数据作为初始化 JList 组件的参数,示例代码如下:

Vector contents = new Vector();
JList jl = new JList(contents);
contents.add("列表1");
contents.add("列表2");
contents.add("列表3");
contents.add("列表4");

如果使用 ListModel 模型为参数,那么需要创建 ListModel 对象。ListModelSwing 包中的一个接口,它提供了获取列表框属性的方法。但是在通常情况下,为了使用户不完全实现 ListModel 接口中的方法,通常自定义一个类继承实现该接口的抽象类 AbstractListModel。该类提供了 getElementAt()getSize() 方法,其中,getElementAt() 方法代表根据项目的索引获取列表框中的值,而 getSize() 方法用于获取列表框中项目的个数。

4 种构造方法我们具体来看一个实例。
要求:在项目中创建 Jlist 类,使该类继承 JFrame 类成为窗体组件,然后在该类中创建列表框,并添加到窗体中。

import javax.swing.*;

public class JListFrame extends JFrame {
    JPanel root;
    JList list;
    JScrollPane js;

    public JListFrame(String title) {
        super(title);

        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);         //设置面板为绝对布局

        list = new JList(new MyListModel());
        js = new JScrollPane(list);
        js.setBounds(10, 10, 100, 100);
        root.add(js);

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 260, 230);
        setVisible(true);
    }

    class MyListModel extends AbstractListModel {   //继承抽象类AbstractListModel
        private String[] constellations = {
                "白羊座", "金牛座", "双子座", "巨蟹座",
                "狮子座", "处女座", "天秤座", "天蝎座",
                "射手座", "摩羯座", "双鱼座", "水瓶座"
        };

        //设置列表框内容
        public Object getElementAt(int x) {    //重写getElementAt()方法
            if (x < constellations.length)
                return constellations[x++];
            else
                return null;
        }

        public int getSize() {                //重写getSize()方法
            return constellations.length;
        }
    }

    //main方法
    public static void main(String[] args) {
        new JListFrame("JList");
    }
}

运行该实例,运行结果如下图所示:
在这里插入图片描述

除了可以使用这个实例中所示的方式创建列表框之外,还可以使用 DefaultListModel 类创建列表框,该类扩展了 AbstractListModel 类,所以也可以通过 DefaultListModel 对象向上转型为 ListModel 接口初始化列表框。同时,DefaultListModel 类提供 addElement() 方法实现将内容添加到列表框中。

下面我们将使用 DefaultListModel 类来创建列表框,具体代码如下:

import javax.swing.*;

public class JListFrame extends JFrame {
    JPanel root;
    JList list;
    DataModel mode;

    public JListFrame(String title) {
        super(title);

        root = new JPanel();      //定义面板容器
        setContentPane(root);

        mode = new DataModel();

        list = new JList(mode);

        list.setBorder(BorderFactory.createTitledBorder("配件"));

        root.add(new JScrollPane(list));

        //设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 260, 230);
        setVisible(true);
    }

    class DataModel extends DefaultListModel {

        String[] s = {"主板", "显示器", "内存", "CPU", "硬盘", "电源", "键盘", "鼠标", "显卡"};

        public int getSize() {
            return s.length;
        }

        public String getElementAt(int index) {
            return (index + 1) + "." + s[index++];
        }
    }

    //main方法
    public static void main(String[] args) {
        new JListFrame("JList");
    }
}

运行该实例,结果如下图所示:
在这里插入图片描述

🧸这次的分享就到这里啦,继续加油哦^^
🍭有出错的地方欢迎在评论区指出来,共同进步,谢谢啦

基本信息 作者: 臧萌 出版社:清华学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了个或多个例程讲解 量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 1.1.1 Java有什么优势? 2 1.1.2 Java在哪儿? 3 1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 1.2.3 配置环境变量 6 1.2.4 测试环境是否安装成功 8 1.2.5 如果失败了怎么办? 9 1.3 让自己的第个程序运行起来 10 1.3.1 编写自己的Hello World源程序 10 1.3.2 编译自己的HelloWorld程序 11 1.3.3 让代码运行起来 13 1.4 初探Hello World 14 1.4.1 类(Class):Java世界中类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 1.6 小结:我们学会了编译和运行Java程序! 18 1.7 习题 19 第2章 搭建自己的集成开发环境 20 教学视频:31分钟 2.1 安装集成开发环境 20 2.1.1 集成开发环境有哪些 20 2.1.2 安装Eclipse 21 2.2 Eclipse界面介绍 23 2.2.1 启动Eclipse 23 2.2.2 Eclipse的Perspective 24 2.2.3 Eclipse的菜单 25 2.2.4 Eclipse的工具条 25 2.2.5 Eclipse辅助视图区 25 2.2.6 Eclipse中Package Explorer 26 2.2.7 Eclipse中的源代码编辑器 26 2.2.8 Eclipse的设置窗口 26 2.2.9 Eclipse中的其他视图 27 2.3 如何使用Eclipse 28 2.3.1 在Eclipse中创建自己的第个项目 28 2.3.2 在Eclipse中编写HelloWorld程序 29 2.3.3 通过Eclipse运行Hello World 31 2.4 小结:Eclipse——功能很强 32 2.5 习题 32 第3章 Java中的基本数据类型和运算符 33 教学视频:1小时5分钟 3.1 Java中的基本数据类型 33 3.1.1 基本数据类型——编程语言中的数据原子 33 3.1.2 Java中的基本上数据类型介绍 34 3.1.3 基本数据类型值域 34 3.2 Java运算符 36 3.2.1 变量的概念 36 3.2.2 插曲:Java中的语句 37 3.2.3 创建个变量和变量名的规范 37 3.2.4 Java中的基本运算符和表达式 39 3.2.5 Java中的布尔运算符 43 3.3 基本数据类型运算的难点 47 3.3.1 强制类型转换——小数哪里去了 48 3.3.2 类型的转换在运算中悄悄进行 50 3.3.3 强制类型转换最优先 52 3.3.4 等号其实不简单 52 3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 if语句的嵌套 71 4.2.3 if-else语句 73 4.2.4 if-else语句嵌套 75 4.3 使用while进行循环 76 4.3.1 使用while语句 76 4.3.2 使用do-while语句 79 4.4 使用for进行循环 80 4.4.1 自增和自减操作 80 4.4.2 for语句 82 4.4.3 for语句省略形式 84 4.5 语句中不能不说的事 84 4.5.1 小心复杂语句中创建的变量 85 4.5.2 别让循环次数给弄懵了 86 4.5.3 循环的嵌套 87 4.6 continue关键与break关键 88 4.6.1 continue关键 88 4.6.2 break关键 89 4.7 使用switch进行跳转 90 4.8 例子 94 4.8.1 从控制台读取数据 94 4.8.2 结账程序中的循环 96 4.9 小结:Java不是个直肠子 98 4.10 习题 99 第5章 数组 100 教学视频:35分钟 5.1 什么是数组 100 5.1.1 假设:如果需要逐个定义变量 100 5.1.2 数组初探 101 5.1.3 数组——物以类聚 104 5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 “实”多“名”的数组 109 5.2.3 “实”多“名”带来的困惑 111 5.3 多维数组 114 5.3.1 什么是多维数组 114 5.3.2 多维数组的实质 115 5.4 数组练兵 123 5.4.1 轻松查询全班成绩 123 5.4.2 轻松查询全校成绩不在话下 124 5.4.3 杨辉三角 125 5.5 小结:方便快速的数组 129 5.6 习题 129 第2篇 Java语言高级语法 第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 6.1.5 源文件的存放 141 6.1.5 理解引用 143 6.1.7 null关键 145 6.2 巧妙使用类中的属性 147 6.2.1 在类中给每个变量个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,方法到底是什么呢? 155 7.1.3 方法调用过程初探 156 7.2 Java普通方法的组成部分 157 7.2.1 访问控制符:public 158 7.2.2 返回值和关键void 158 7.2.3 方法名(Method Name) 159 7.2.4 参数列表(Parameter List) 159 7.2.5 方法体(Method Body) 160 7.2.6 方法串串烧 160 7.3 方法的参数:让汽车加速 161 7.3.1 方法的参数:让汽车可以加速 161 7.3.2 带参数的方法有何不同? 162 7.3.3 让方法有多个参数 163 7.4 返回值:汽车超速了吗? 164 7.4.1 写个有返回值的方法 164 7.4.2 调用有返回值的方法 165 7.4.3 发生了什么?如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法 169 7.5.4 测试下 169 7.5.5 重载容易引发误解的两个地方——返回类型和形参名 170 7.5.6 重载中的最难点——参数匹配原则 171 7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 7.6.3 发生了什么 174 7.7 加餐:局部变量和实例变量 175 7.7.1 什么是局部变量(Local Variable) 175 7.7.2 什么是实例变量(Instance Variable) 177 7.8 this关键:指向对象自己的引用 177 7.8.1 发现问题:当实例变量和局部变量重名 177 7.8.2 经常深藏不露的this关键 178 7.8.3 在方法中调用方法 179 7.9 构造方法(Constructor) 181 7.9.1 构造(Constructor)方法初探 181 7.9.2 如何使用构造方法 182 7.9.3 留个无参数的构造方法——给重要属性赋初始值 183 7.9.4 在构造方法中调用构造方法 184 7.10 方法汇总 185 7.10.1 本例中用到的类 186 7.10.2 使用例程将本章的知识穿起来 189 7.11 小结:多方位理解Java方法 191 7.12 习题 192 第8章 Java中的包(Package)命名习惯和注释 193 教学视频:43分钟 8.1 Java中的包(Package) 193 8.1.1 Java中的包 193 8.1.2 在Eclipse中使用包 194 8.1.3 天上掉下个package 197 8.1.4 包带来了什么? 197 8.2 import语句:化繁为简 200 8.2.1 import语句 200 8.2.2 网打尽包中所有类 201 8.2.3 import语句带来的小问题 202 8.2.4 默认引入的包 204 8.3 命名习惯回顾 204 8.4 Java中的注释 205 8.4.1 使用双斜杠的单行注释 205 8.4.2 多行注释 206 8.4.3 Javadoc注释 206 8.5 小结:包让Java的类更清晰优雅 208 8.6 习题 209 第9章 再看数组、符串和main()方法 210 教学视频:29分钟 9.1 数组也是类 210 9.1.1 得到数组的长度 210 9.1.2 加餐:不可改变的final变量 211 9.1.3 多维数组的长度 212 9.1.4 维数组的clone()方法 212 9.1.5 当数组类型不再是基本数据类型 214 9.1.6 多维数组的clone()方法 217 9.2 老朋友String类 220 9.2.1 遍历String中的符 220 9.2.2 获取符串中的部分 222 9.2.3 判断两个符串是否相等 223 9.2.4 判断符串的开头和结尾 225 9.2.5 分割符串 225 9.2.6 在符串中查找子符串或符 226 9.2.7 替换符串中的内容 226 9.2.8 String对象——磐石刻 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵符 228 9.3.2 String和StringBuffer个都不能少 229 9.4 最熟悉的陌生人:main()方法 229 9.4.1 main()方法的参数 229 9.4.2 static关键 232 9.4.3 当方法遇到static关键 233 9.5 小结:学会使用类中的方法 235 9.6 习题 236 第10章 继承和多态 237 教学视频:1小时55分钟 10.1 继承——最优的解决方案 237 10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 切还是从汽车开始 238 10.1.3 类车,个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的单继承 248 10.1.8 Java中的类图 249 10.1.9 万类之祖——Object类 250 10.2 子类对象?父类对象? 251 10.2.1 父随子行 251 10.2.2 当构造方法遇到继承 254 10.2.3 记得给类个无参数的构造方法 255 10.2.4 调用父类中的构造方法 256 10.2.5 对象也会“变脸” 258 10.2.6 遵守语法,正确“变脸” 262 10.3 覆盖——与继承如影随形 264 10.3.1 当方法不再通用 264 10.3.2 覆盖——让众口不再难调 265 10.3.3 覆盖——到底调用了哪个方法 270 10.3.4 覆盖的语法不简单 272 10.3.5 更复杂的使用覆盖的情况 274 10.3.6 覆盖——不得不打开的潘多拉魔盒 276 10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再神秘 285 10.5.3 instanceof运算符——让对象告诉你它的类是谁 286 10.6 小结:继承和多态让世界丰富多彩 287 10.7 习题 290 第11章 修饰符(Qualifier) 291 教学视频:26分钟 11.1 插曲:类的组成部分的名 291 11.2 类中的修饰符 292 11.2.1 无修饰符类 292 11.2.2 类的可见性 293 11.2.3 final——让类不可被继承 295 11.2.4 理解final关键 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 301 11.3.5 private:仅对本类可见 303 11.3.6 理解4个访问控制符 304 11.3.7 访问控制符可见性汇总 306 11.3.8 访问控制符带来的覆盖问题 306 11.3.9 final:不允许方法被覆盖 310 11.3.10 重温静态方法 311 11.3.11 静态方法——类范围里的概念 312 11.3.12 静态方法何以为“静态” 314 11.4 变量的修饰符 316 11.4.1 变量方法皆成员 317 11.4.2 变量的访问控制符 317 11.4.3 使用private修饰类的成员变量 318 11.4.4 使用private,然后呢? 320 11.4.5 变量的覆盖 322 11.4.6 使用final修饰成员变量 325 11.4.7 静态成员变量 326 11.4.8 局部变量的修饰符 326 11.4.9 当final遇到引用类型成员变量 327 11.5 小结:修饰符作用 328 11.6 习题 330 第12章 接口 331 教学视频:29分钟 12.1 自行车带来的问题 331 12.1.1 记录马路上的车辆 331 12.1.2 引发问题的自行车 335 12.1.3 仔细分析recordTransport()方法 338 12.2 初用接口 339 12.2.1 准备好需要用到的类 339 12.2.2 认识接口的代码组成 340 12.2.3 什么是接口 341 12.2.4 使用接口仅需步——实现接口 342 12.2.5 接口——让类集多重类型于身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349 12.3.2 面向接口编程 351 12.3.3 话说“抽象” 353 12.3.4 接口瘦身 355 12.3.5 实现多个接口 355 12.3.6 接口中的变量 357 12.3.7 接口的继承 358 12.3.8 匹配抽象方法中的类型 359 12.3.9 空接口 361 12.4 小结:接口的难点在于何时使用 362 12.5 习题 364 第13章 抽象类和内部类 365 教学视频:26分钟 13.1 抽象类(Abstract Class) 365 13.1.1 不知道怎么打招呼的Person类 365 13.1.2 当类中有了抽象方法 367 13.1.3 抽象类语法详解 368 13.1.4 理解抽象类的作用 369 13.2 内部类的分类(Inner Class) 370 13.2.1 成员内部类 370 13.2.2 局部内部类 372 13.3 成员内部类 374 13.3.1 使用成员内部类 374 13.3.2 成员内部类的修饰符 375 13.3.3 在类外部使用内部类 376 13.3.4 非静态内部类的特性 378 13.3.5 外部类访问成员内部类中的属性 382 13.3.6 静态成员内部类 383 13.4 局部内部类 384 13.4.1 局部内部类之“局部” 385 13.4.2 局部内部类之“内部类” 386 13.4.3 使用局部内部类 388 13.5 匿名内部类(Anonymous inner classes) 389 13.5.1 准备工作 389 13.5.2 匿名内部类的语法 389 13.5.3 通过接口使用匿名类 390 13.5.4 通过抽象类使用匿名类 391 13.6 类,这样路走来 391 13.7 小结:丰富多彩的类 395 13.8 习题 397 第14章 Java的异常处理机制 398 教学视频:36分钟 14.1 认识异常 398 14.1.1 异常什么时候发生 398 14.1.2 异常是什么 401 14.1.3 Java异常机制的流程 401 14.2 抛出异常 403 14.2.1 异常类的父类——Throwable 403 14.2.2 在代码中使用throw抛出个异常 404 14.2.3 在方法声明中使用throws 407 14.2.4 构造自定义异常类 409 14.2.5 使用自定义异常类 410 14.3 异常的传递 411 14.3.1 抛出最确切的异常类型 411 14.3.2 Java异常的传递 412 14.3.3 图说Java异常的传递 414 14.4 异常的处理 418 14.4.1 把异常捉住 418 14.4.2 图说异常处理流程 421 14.4.3 多类异常,并处理 424 14.4.4 try-catch-finally语句 426 14.4.5 try-finally语句 431 14.4.6 好好利用catch语句 432 14.5 异常的类型 433 14.5.1 3个类的继承关系 433 14.5.2 必须处理的Exception类 434 14.5.3 灵活掌握的RuntimeException类 434 14.5.4 不用处理的Error类 435 14.6 小结:终止错误的蔓延 435 14.7 习题 437 第15章 多线程编程 438 教学视频:1小时14分钟 15.1 线程——执行代码的机器 438 15.1.1 线程——执行代码的基本单位 438 15.1.2 演奏会模型 440 15.2 Java中的线程编程 443 15.2.1 线程类Thread 443 15.2.2 覆盖Thread类的run()方法 444 15.2.3 使用Runnable接口 446 15.2.4 两个线程 448 15.3 深入学习Thread类 449 15.3.1 线程的名 449 15.3.2 得到当前的线程 451 15.3.3 让线程“沉睡” 453 15.4 多个线程的故事 457 15.4.1 个有多个线程的程序 457 15.4.2 复印社模型 459 15.4.3 个简单的复印社例程 461 15.5 多个线程的同步 463 15.5.1 线程同步之synchronized关键 463 15.5.2 深入学习synchronized关键 468 15.5.3 静态同步方法 469 15.5.4 非静态的同步方法 472 15.5.5 银行的麻烦——账户乱套了 474 15.5.6 多角度理解同步方法 481 15.5.7 闲话同步方法的使用 484 15.5.8 同步代码块 485 15.5.9 锁(Lock) 486 15.5.10 线程同步之wait()和notify()方法 488 15.5.11 wait和notify的顺序 491 15.6 小结:线程——代码执行器 494 15.7 习题 495 第3篇 Java语言编程进阶 第16章 如何学习本篇 498 教学视频:15分钟 16.1 多想多写多练 498 16.2 术业有专攻 498 16.3 拆分问题,逐个击破 500 16.4 阅读Javadoc 500 16.5 小结:练兵马上开始 506 16.6 习题 507 第17章 编程常用知识 508 教学视频:18分钟 17.1 再谈对象的比较 508 17.1.1 hashcode()方法 508 17.1.2 equals()方法 509 17.1.3 对象的比较equals()方法 509 17.2 Java中的集合类框架 510 17.2.1 集合类框架中的接口 510 17.2.2 List接口 511 17.2.3 使用ArrayList 512 17.2.4 Set接口 516 17.2.5 使用HashSet类 517 17.2.6 List与Set 518 17.3 泛型简介 518 17.3.1 没有泛型时的程序 519 17.3.2 使用泛型——避免强制类型转 520 17.4 Map接口 522 17.4.1 认识Map 522 17.4.2 使用HashMap 523 17.5 符集和编码 524 17.5.1 符集 524 17.5.2 编码 525 17.5.3 关于符集的小程序 526 17.6 小结:编程需要打好基础 529 17.7 习题 530 第18章 Java文件编程和Java文件I/O 531 教学视频:9分钟 18.1 Java中的文件编程 531 18.1.1 File类 531 18.1.2 创建和删除文件 532 18.1.3 列出文件和文件夹 533 18.1.4 重命名文件 535 18.2 Java的I/O编程 536 18.2.1 理解Java中的Stream 536 18.2.2 向文件中写入数据 538 18.2.3 从文件中读取数据 539 18.2.4 从控制台读取数据 541 18.2.5 使用输出流写入数据 543 18.2.6 使用输入流读取数据 545 18.3 小结:Java中的文件类和输入输出机制 546 18.4 习题 547 第19章 Java Socket编程 548 教学视频:8分钟 19.1 IP地址和端口号 548 19.1.1 IP地址——计算机的标识 548 19.1.2 端口号——通信的窗口 549 19.1.3 网络,IP地址和端口号 551 19.2 Java TCP编程 551 19.2.1 数据传输协议 552 19.2.2 TCP的数据传输模式 552 19.2.3 第个TCP小程序 553 19.3 Java UDP编程 557 19.3.1 UDP的数据传输模式 557 19.3.2 使用UDP协议收发数据 558 19.3.3 TCP和UDP的区别 560 19.4 小结:让程序伸向整个网络 561 19.5 习题 561 第20章 Java Swing编程 562 教学视频:14分钟 20.1 Java Swing编程简介 562 20.1.1 图形用户界面编程简介 562 20.1.2 组件 563 20.1.3 布局管理器(Layout Manager) 563 20.1.4 事件处理(Event Handling) 564 20.2 Swing基本组件 565 20.2.1 窗口(JFrame) 565 20.2.2 Swing的线程 567 20.2.3 Swing组件的鼻祖——JComponent 567 20.2.4 Swing面板类 568 20.2.5 Swing中的标签 568 20.2.6 Swing中的文本框 570 20.2.7 Swing中的文本域 571 20.2.8 Swing中的组合框 572 20.2.9 Swing中的按钮 573 20.3 Swing的布局管理器 574 20.3.1 最简单的FlowLayout 574 20.3.2 东南西北中之BorderLayout 574 20.3.3 平均分割之——GridLayout 576 20.3.4 最强的布局管理器——GridBagLayout 577 20.3.5 使用多个布局管理器 579 20.4 Swing的事件处理 581 20.4.1 事件的传递和封装 581 20.4.2 事件监听器——事件的处理者 582 20.4.3 Swing事件处理的机制 584 20.4.4 事件监听器的编写 586 20.4.5 如何学习更多的事件 588 20.5 小结:从此不再依赖控制台 588 20.6 习题 588 第21章 编程,需要的是想象力和恒心 589 教学视频:13分钟 21.1 编程的前奏 589 21.1.1 细数手中的积木 589 21.1.2 发挥想象力 590 21.1.3 确定程序的功能 591 21.2 聊天窗口程序 591 21.2.1 聊天程序设计 591 21.2.2 设计程序运行效果 593 21.2.3 UDP消息收发模块 595 21.2.4 图形用户界面模块 598 21.2.5 消息处理模块 600 21.2.6 个更通用的聊天程序 601 21.3 小结:编程是必不可少的锻炼 602 21.4 习题 602 第22章 JDBC入门 603 教学视频:11分钟 22.1 JDBC的基本API 603 22.1.1 JDBC是什么 603 22.1.2 DriverManager——驱动管理器 605 22.1.3 Connection接口 606 22.1.4 Statement接口 606 22.1.5 PreparedStatement接口 606 22.1.6 ResultSet接口 607 22.1.7 JDBC-ODBC桥 607 22.2 个操作数据库的简单程序 608 22.2.1 程序的执行结果 608 22.2.2 程序设计与模块划分 609 22.2.3 准备好数据源 610 22.2.4 数据库操作模块的实现 610 22.2.5 图形用户界面模块的实现 611 22.3 小结:强的JDBC标准 613 22.4 习题 613
使用.gitignore文件来忽略某些文件或目录,使其不被Git进行版本控制。下面是在IDEA中使用.gitignore的步骤: 第步:打开IDEA,点击菜单栏的File -> Settings,在左侧菜单中找到Plugins,点击搜索栏搜索.ignore,点击Install安装插件。 第二步:在项目上右键,选择New -> .ignore file -> .gitignore file(Git)。 第三步:选择Example user template,然后可以根据需要自行添加需要忽略的文件或目录。最后点击Generate生成。 第四步:如果某些文件已经被纳入版本管理中,修改.gitignore是无效的。解决方法是先将这些文件从缓存中删除(改变成未跟踪状态),然后再提交。具体操作如下: ``` git rm -r --cached . git add . git commit -m 'update .gitignore' git push -u origin master ``` 注意,.gitignore只能忽略那些原来没有被跟踪的文件。 第五步:测试是否生效,如果只有想要进行版本控制的文件在里面,则证明.gitignore文件已经生效。 总结来说,使用.gitignore文件来忽略某些文件或目录的步骤是:安装插件 -> 创建.gitignore文件 -> 添加需要忽略的文件或目录 -> 提交并测试是否生效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在IntelliJ IDEA中使用.ignore插件忽略Git不必要提交的文件](https://blog.csdn.net/NotRepent/article/details/124321197)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [idea中 .gitignore文件的使用](https://blog.csdn.net/weixin_51363503/article/details/126838947)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 94
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序喵正在路上

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值