1.概述
一个简单的swing登录界面,使用了简单的JDBC.
如图:
2.UI
(1)主界面
主界面使用了31网格布局+三个JPanel,中间的JPanel使用了22网格布局:
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.Enumeration;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
public class UserManagement
{
private JFrame mainFrame = new JFrame("登录");
private Container container = mainFrame.getContentPane();
private JLabel titleLabel = new JLabel("登录/注册", JLabel.CENTER);
private JPanel inputField = new JPanel();
private JLabel usernameLabel = new JLabel("用户名:", JLabel.CENTER);
private JTextField username = new JTextField();
private JLabel passwordLabel = new JLabel("密码:", JLabel.CENTER);
private JPasswordField password = new JPasswordField();
private JPanel buttonField = new JPanel();
private JButton save = new JButton("登录/注册");
private JButton cancel = new JButton("取消");
public UserManagement()
{
init();
setFont(new Font("微软雅黑",Font.PLAIN,14));
addEvent();
}
private void init()
{
container.setLayout(new GridLayout(3, 1, 0, 10));
container.add(titleLabel);
inputField.setLayout(new GridLayout(2, 2, 5, 5));
inputField.add(usernameLabel);
inputField.add(username);
inputField.add(passwordLabel);
inputField.add(password);
container.add(inputField);
buttonField.setLayout(new FlowLayout(FlowLayout.CENTER,20,0));
buttonField.add(save);
buttonField.add(cancel);
container.add(buttonField);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(300, 200);
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
}
private void setFont(Font font)
{
FontUIResource fontRes = new FontUIResource(font);
for(Enumeration
重点说一下几行代码:
mainFrame.setLocationRelativeTo(null);
使整个JFrame处于屏幕水平居中与垂直居中位置.
private void setFont(Font font)
{
FontUIResource fontRes = new FontUIResource(font);
for(Enumeration
设置所有组件的字体.
cancel.addActionListener(
e->
{
mainFrame.dispose();
}
);
按钮添加关闭窗口事件.
JOptionPane.showConfirmDialog(null,"添加"+(DBUtils.add(user) ? "成功" : "失败"), "",JOptionPane.CLOSED_OPTION);
提示信息框.
(2)用户信息界面
用户信息界面采用了31网格,同样3个JPanel,中间的JPanel布局为32网格.
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.Enumeration;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
public class UserInformation
{
private JFrame mainFrame = new JFrame("用户信息");
private Container container = mainFrame.getContentPane();
private JLabel titleLabel = new JLabel("用户信息", JLabel.CENTER);
private JPanel inputField = new JPanel();
private JLabel idLabel = new JLabel("Id",JLabel.CENTER);
private JTextField id = new JTextField();
private JLabel usernameLabel = new JLabel("Username", JLabel.CENTER);
private JTextField username = new JTextField();
private JLabel passwordLabel = new JLabel("Password", JLabel.CENTER);
private JPasswordField password = new JPasswordField();
private JPanel buttonField = new JPanel();
private JButton update = new JButton("更新");
private User user;
public UserInformation(User user)
{
if(user == null)
mainFrame.dispose();
this.user = user;
init();
setFont(new Font("微软雅黑", Font.PLAIN, 14));
addEvent();
}
private void init()
{
container.setLayout(new GridLayout(3,1,0,10));
container.add(titleLabel);
inputField.setLayout(new GridLayout(3,2,0,3));
inputField.add(idLabel);
inputField.add(id);
id.setText(user.getId());
id.setEditable(false);
inputField.add(usernameLabel);
username.setText(user.getName());
inputField.add(username);
inputField.add(passwordLabel);
password.setText(user.getPassword());
inputField.add(password);
container.add(inputField);
buttonField.setLayout(new FlowLayout());
buttonField.add(update);
container.add(buttonField);
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.setLocationRelativeTo(null);
mainFrame.setSize(300,250);
}
private void setFont(Font font)
{
FontUIResource fontRes = new FontUIResource(font);
for (Enumeration
这个JFrame不能设置EXIT_ON_CLOSE.因为这不是"主窗体",不然的话点击关闭主窗体也没了.
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
3.数据库操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
public class DBUtils
{
private final static String driver = "com.mysql.cj.jdbc.Driver";
private final static String username = "aa";
private final static String password = "123456";
private final static String url = "jdbc:mysql://127.0.0.1/user_test";
private final static String insert = "insert into user(id,username,password) values(?,?,?)";
private final static String update = "update user set username = ?,password = ? where id = ?";
private final static String delete = "delete from user where id = ?";
private final static String select = "select * from user where username = ?";
private static Connection connection;
static
{
try
{
Class.forName(driver);
connection = DriverManager.getConnection(url,username,password);
}
catch(Exception e)
{
e.printStackTrace();
connection = null;
}
}
public static boolean exists(User user)
{
try
{
PreparedStatement exist = connection.prepareStatement(select);
exist.setString(1,user.getName());
ResultSet existResult = exist.executeQuery();
return existResult.next();
}
catch (SQLException e)
{
e.printStackTrace();
return false;
}
}
public static boolean add(User user)
{
try
{
PreparedStatement add = connection.prepareStatement(insert);
user.setId(UUID.randomUUID().toString().substring(0, 8));
add.setString(1, user.getId());
add.setString(2, user.getName());
add.setString(3, user.getPassword());
return add.executeUpdate() == 1;
}
catch (SQLException e)
{
e.printStackTrace();
return false;
}
}
public static boolean modify(User user)
{
try
{
PreparedStatement modify = connection.prepareStatement(update);
System.out.println(user.getName());
modify.setString(1, user.getName());
modify.setString(2, user.getPassword());
modify.setString(3, user.getId());
return modify.executeUpdate() == 1;
}
catch (SQLException e)
{
e.printStackTrace();
return false;
}
}
public static boolean delete(User user)
{
if(exists(user))
{
try
{
PreparedStatement del = connection.prepareStatement(delete);
del.setString(1, user.getId());
return del.executeUpdate() == 1;
}
catch (SQLException e)
{
e.printStackTrace();
}
}
return false;
}
public static User getByName(String name)
{
try
{
PreparedStatement exist = connection.prepareStatement(select);
exist.setString(1, name);
ResultSet existResult = exist.executeQuery();
if(existResult.next())
{
User user = new User();
user.setId(existResult.getString("id"));
user.setName(existResult.getString("username"));
user.setPassword(existResult.getString("password"));
return user;
}
return null;
}
catch (SQLException e)
{
e.printStackTrace();
return null;
}
}
}
注册驱动后,增删查改,就是注意一下mysql版本与驱动名对应.