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技术站