Java窗口精细全方位讲解

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日

相关文章

  • 深入解析Spring Boot 的SPI机制详情

    深入解析Spring Boot的SPI机制详情 在本文中,我们将深入探讨Spring Boot的SPI机制,包括SPI的概念、使用方式、实现原理和示例。 SPI的概念 SPI全称为Service Provider Interface,是Java提供的一种服务发现机制。它允许第三方服务提供者在不修改代码的情况下,向应用程序提供服务实现。SPI机制的核心是服务接…

    Java 2023年5月15日
    00
  • jQuery easyui刷新当前tabs的方法

    关于”jQuery easyui刷新当前tabs的方法”,我们可以使用tabs组件的refresh方法或者手动刷新方式来实现。下面分别进行说明: 使用refresh方法 确保你已经引入了jQuery和jQuery easyui的相关文件。 在需要刷新tabs的地方,获取当前选中的tabs选项卡的索引值。 var currentTabIndex = $(&qu…

    Java 2023年6月15日
    00
  • Spring Security实现分布式系统授权方案详解

    Spring Security实现分布式系统授权方案详解 简介 Spring Security是一个基于Spring的安全框架,提供了一套全面的安全服务,支持Web访问控制、安全认证、权限管理、API授权等。在分布式系统中,如何对服务进行安全认证和权限控制变得十分重要。本文将介绍如何使用Spring Security实现分布式系统的授权方案。 实现步骤 1.…

    Java 2023年6月3日
    00
  • Java中关于文件路径读取问题的分析

    下面是关于Java中文件路径读取问题的分析攻略,包括常见问题及解决办法。 问题描述 在Java程序中,读取文件时常会遇到文件路径问题。文件可能位于磁盘的不同位置,如何正确地指定文件路径是很重要的。 解决方法 在解决文件路径问题之前,先了解一下文件路径的分类。 绝对路径与相对路径 绝对路径:从磁盘根目录开始的路径,如 Windows 中的 C:\Users\z…

    Java 2023年5月19日
    00
  • 基于EJB技术的商务预订系统的开发

    开发基于EJB技术的商务预订系统可以分为以下几个步骤: 1. 需求分析和系统设计 在需求分析和系统设计阶段,需要考虑以下因素: 系统的功能需求,例如用户登录、商品展示、购物车管理、订单管理、支付管理等; 系统的性能需求,例如用户并发量、数据处理量、响应时间、可靠性等; 系统的架构设计,例如服务器端容器的选择、数据库的设计、系统的分层设计等。 示例1:用户登录…

    Java 2023年6月15日
    00
  • javaweb实现投票系统

    实现一个简单的投票系统可以分为以下步骤: 确定需求,设计数据库表结构 首先需要明确系统的功能需求以及相应的数据表结构,如投票主题、投票选项、投票结果等。可以使用MySQL、Oracle等数据库进行设计。 搭建开发环境 选择Eclipse、IntelliJ IDEA等Java开发工具,搭建相应的开发环境,并搭配相应的Web服务器,如Tomcat、Jetty等。…

    Java 2023年5月19日
    00
  • java多线程模拟交通灯管理系统

    下面我将详细讲解如何编写一个Java多线程模拟交通灯管理系统。 前言 交通灯是城市中必不可少的重要设施之一,能帮助路面交通管理变得更加有序。为了更好地理解交通灯的工作原理,我们可以开发一个Java多线程模拟交通灯管理系统来模拟交通灯的运行过程。 设计思路 我们的系统需要设计两个交通灯对象,即红绿灯和绿红灯,交替更替地工作。为了实现此目的,我们可以使用多线程的…

    Java 2023年5月19日
    00
  • Sprint Boot @ImportResource使用方法详解

    Spring Boot的@ImportResource注解 在Spring Boot中,@ImportResource注解用于导入XML配置文件。使用@ImportResource注解可以将XML配置文件中定义的bean注册到Spring应用程序上下文中。本文将详细介绍@ImportResource注解的作用和使用方法,并提供两个示例说明。 @ImportR…

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