Java窗口精细全方位讲解

yizhihongxing

Java窗口精细全方位讲解

简介

本篇攻略将完整讲解如何用Java语言创建窗口并增加各种控件,包括文本框、按钮、下拉框等等,并讲解如何实现它们的交互功能。

准备工作

在开始编程前,你需要安装Java开发工具包(JDK)和一个编译器,比如Eclipse或者IntelliJ IDEA。这里我们以Eclipse为例。

创建窗口

要创建窗口,我们需要创建一个新的Java项目。在Eclipse中,我们可以选择“File” -> “New” -> “Java Project”来创建一个新的Java项目。

接下来,我们需要创建一个新的Java类。在Eclipse中,右键单击“src”文件夹,选择“New” -> “Class”,并给类命名为“MainWindow”。

在新建的类中,我们需要继承JFrame类来创建窗口:

import javax.swing.JFrame;

public class MainWindow extends JFrame {
    public MainWindow() {
        setTitle("Java窗口精细全方位讲解");
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}

在上述代码中,我们给窗口设置了标题、大小、位置、关闭方式,并让窗口可见。

增加控件

要增加控件,我们需要在窗口中使用布局管理器。Java提供了很多布局管理器,比如GridLayout、BorderLayout、FlowLayout等等,你可以根据需求选择合适的布局管理器。这里我们使用GridBagLayout布局管理器。

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

public class MainWindow extends JFrame {
    public MainWindow() {
        setTitle("Java窗口精细全方位讲解");
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new GridBagLayout()); // 设置布局管理器

        JLabel nameLabel = new JLabel("姓名:");
        JTextField nameField = new JTextField(20);

        JLabel genderLabel = new JLabel("性别:");
        String[] genderOptions = {"男", "女"};
        JComboBox<String> genderBox = new JComboBox<>(genderOptions);

        JButton okButton = new JButton("确定");

        GridBagConstraints gbc = new GridBagConstraints();

        // 添加控件
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(nameLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        add(nameField, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        add(genderLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        add(genderBox, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        add(okButton, gbc);

        setVisible(true);
    }
}

在上述代码中,我们创建了一个标签、一个文本框、一个下拉框和一个按钮,并根据需要设置了它们的大小和位置,然后使用GridBagConstraints来指定它们在窗口中的位置和大小。最后,我们把它们添加到窗口中,并让窗口可见。

控件事件处理

要实现控件的事件处理,我们可以使用匿名内部类或者Lambda表达式。这里我们使用Lambda表达式。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class MainWindow extends JFrame {
    public MainWindow() {
        setTitle("Java窗口精细全方位讲解");
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new GridBagLayout()); // 设置布局管理器

        JLabel nameLabel = new JLabel("姓名:");
        JTextField nameField = new JTextField(20);

        JLabel genderLabel = new JLabel("性别:");
        String[] genderOptions = {"男", "女"};
        JComboBox<String> genderBox = new JComboBox<>(genderOptions);

        JButton okButton = new JButton("确定");

        GridBagConstraints gbc = new GridBagConstraints();

        // 添加控件
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(nameLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        add(nameField, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        add(genderLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        add(genderBox, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        add(okButton, gbc);

        // 控件事件处理
        okButton.addActionListener((ActionEvent e) -> {
            String name = nameField.getText();
            String gender = (String) genderBox.getSelectedItem();
            JOptionPane.showMessageDialog(this, "姓名:" + name + "\n性别:" + gender);
        });

        setVisible(true);
    }

    public static void main(String[] args) {
        new MainWindow();
    }
}

在上述代码中,我们在按钮上添加了一个ActionListener监听器,当按钮被点击时,会执行监听器中的代码,这里我们弹出一个包含文本框和下拉框中内容的对话框。

示例说明

示例一

在一个场景中,你需要让用户输入姓名和性别,并在用户点击“确定”按钮后将它们存到数据库中。你可以使用本教程中的代码,增加一个数据库连接的部分来实现这个功能。

比如,你可以使用以下代码来连接MySQL数据库:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseUtils {
    static String url = "jdbc:mysql://localhost:3306/test";
    static String username = "root";
    static String password = "123456";

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }
}

然后,在按钮点击事件中调用以下代码将数据存入数据库:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.*;

public class MainWindow extends JFrame {
    public MainWindow() {
        // ...

        okButton.addActionListener((ActionEvent e) -> {
            String name = nameField.getText();
            String gender = (String) genderBox.getSelectedItem();
            try {
                Connection conn = DatabaseUtils.getConnection();
                PreparedStatement ps = conn.prepareStatement("INSERT INTO users (name, gender) VALUES (?, ?)");
                ps.setString(1, name);
                ps.setString(2, gender);
                ps.executeUpdate();
                JOptionPane.showMessageDialog(this, "存储成功!");
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(this, "存储失败!");
                ex.printStackTrace();
            }
        });

        setVisible(true);
    }
}

这样,当用户点击“确定”按钮时,窗口中的数据将会被存储到数据库中。

示例二

在另一个场景中,你需要做一个登录窗口,要求用户输入用户名和密码,并在用户点击“登录”按钮后验证用户名和密码是否正确。

你可以使用本教程中的代码,在按钮点击事件中调用以下代码来验证用户名和密码:

import javax.swing.*;

public class LoginWindow extends JFrame {
    public LoginWindow() {
        setTitle("登录");
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new GridBagLayout());

        JLabel usernameLabel = new JLabel("用户名:");
        JTextField usernameField = new JTextField(20);

        JLabel passwordLabel = new JLabel("密码:");
        JPasswordField passwordField = new JPasswordField(20);

        JButton loginButton = new JButton("登录");

        GridBagConstraints gbc = new GridBagConstraints();

        gbc.gridx = 0;
        gbc.gridy = 0;
        add(usernameLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        add(usernameField, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        add(passwordLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        add(passwordField, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        add(loginButton, gbc);

        loginButton.addActionListener((ActionEvent e) -> {
            String username = usernameField.getText();
            String password = new String(passwordField.getPassword());
            if ("admin".equals(username) && "123456".equals(password)) {
                JOptionPane.showMessageDialog(this, "登录成功!");
            } else {
                JOptionPane.showMessageDialog(this, "用户名或密码错误!");
            }
        });

        setVisible(true);
    }

    public static void main(String[] args) {
        new LoginWindow();
    }
}

这里我们通过判断用户名和密码是否正确来弹出不同的对话框。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java窗口精细全方位讲解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • JavaScript对象数组如何按指定属性和排序方向进行排序

    对JavaScript对象数组进行排序可以使用JavaScript内置的sort()函数,它可以按照指定的属性和排序方向进行排序。 首先,需要使用sort()函数来定义排序规则。sort()函数的参数是一个函数,该函数负责定义排序规则。该函数接收两个参数,分别是要进行比较的两个元素。该函数需要返回一个数值类型的值,根据返回值的不同,sort()函数决定将两个…

    Java 2023年5月19日
    00
  • java中压缩文件并下载的实例详解

    下面我将向你详细讲解如何在Java中压缩文件并下载的实例详解。本攻略中包含以下内容: 压缩文件 下载压缩文件 完整示例1:压缩文件并下载 完整示例2:压缩多个文件并下载 压缩文件 在Java中,我们可以使用java.util.zip包中的ZipOutputStream类来压缩文件。 首先,我们需要创建一个ZipOutputStream对象,它用于将文件写入压…

    Java 2023年5月20日
    00
  • uni-app如何实现增量更新功能

    uni-app 是一款基于 Vue.js 的跨平台前端开发框架,支持将同一份代码编译生成多个平台可执行程序(如H5、小程序、App等),可方便地实现大型项目的开发、管理与维护。对于一个中大型项目的开发,增量更新是非常关键的功能,它能够大大缩短用户等待的时间,提高用户体验。本文将详细讲解如何在 uni-app 中实现增量更新功能的攻略。 第一步:使用uni-a…

    Java 2023年5月23日
    00
  • android的编译和运行过程深入分析

    Android的编译运行过程深入分析 介绍 Android是一个基于Linux系统的开源移动操作系统。编译和运行Android系统涉及到多个步骤,本攻略将介绍Android的编译和运行过程以及其中涉及的关键步骤。 Android的编译过程 Android系统的编译过程是一个复杂的过程,涉及到多个环节。 前置条件 在开始编译之前,需要满足以下前置条件。 安装好…

    Java 2023年5月26日
    00
  • spring boot基于Java的容器配置讲解

    下面给出关于“spring boot基于Java的容器配置讲解”的完整攻略。 什么是Spring Boot? Spring Boot是一种基于Spring框架的快速应用开发框架。使用Spring Boot可以快速构建可部署的、生产级别的Spring应用程序,而不需要编写大量的代码,因为它提供了几乎所有的配置。 Spring Boot容器配置 在Spring …

    Java 2023年5月19日
    00
  • SpringMVC框架如何与Junit整合看这个就够了

    SpringMVC框架如何与Junit整合 本文将详细讲解如何使用Junit测试SpringMVC框架,并提供两个示例说明。 环境准备 在开始整合Junit和SpringMVC框架之前,我们需要准备以下环境: JDK 18或以上版本 Maven 3.6.3或以上版本 Tomcat 9.0或以上版本 Junit 5.7.2或以上版本 实现步骤 下面是整合Jun…

    Java 2023年5月17日
    00
  • Spring Security 实现“记住我”功能及原理解析

    下面是关于“Spring Security 实现‘记住我’功能及原理解析”的完整攻略。 1. Spring Security “记住我”功能原理 1.1 什么是“记住我”功能 “记住我”是指,在浏览器关闭后,再次打开浏览器后用户仍然不需要重新登录,直接就可以访问受保护的资源。这个功能在某些情况下非常方便,比如在家里用个人电脑访问自己的博客网站,不想每次都登录…

    Java 2023年5月20日
    00
  • JavaWeb之Filter过滤器详解

    下面是“JavaWeb之Filter过滤器详解”的完整攻略: 一、Filter过滤器概述 1.1 过滤器基本介绍 Filter是JavaWeb中非常重要的一个概念,可以用于拦截请求、修改响应内容等操作。在Web服务器中,Filter的位置位于Servlet容器和客户端浏览器之间,每个Web应用程序(Web App)都可以定义若干个Filter,用于完成特定的…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部